Dictionary与String - ShenYj/ShenYj.github.io GitHub Wiki
JSON、Dictionary
和String
我们再熟悉不过了,开发中也会经常需要在Model
之间进行转换, 总结一下日常开发中的使用注意
-
ObjectMapper
库let account = LocalManager.shared.accountRelay.value log.debug("ObjectMapper toJSON: \(account?.toJSON() ?? [:])") log.debug("ObjectMapper toJSONString: \(account?.toJSONString() ?? "")") log.debug("ObjectMapper toJSONString: \(account?.toJSONString(prettyPrint: true) ?? "")")
打印结果:
- ObjectMapper toJSON: ["promoted": 0, "mobilePhone": "186****9319", "userId": 0] - ObjectMapper toJSONString: {"promoted":0,"mobilePhone":"186****9319","userId":0} - ObjectMapper toJSONString: { "promoted" : 0, "mobilePhone" : "186****9319", "userId" : 0 }
需要注意转换后的JSONString
是否包含转译符
如果你需要发送一段JSONString
格式的数据, 那么转译符很有可能是必要的
如果你只是为了格式化查阅, 那么是不需要转译符的, 尤其是在你需要print
可选值的时候
-
Model
转换成JSONString
-
可以先利用
ObjectMapper
将Model
转换成Dictionary
, 再通过SwifterSwift
转JSONString
let account = LocalManager.shared.accountRelay.value let json = account?.toJSON() log.debug("SwifterSwift toJSONString: \(json?.jsonString() ?? "")") log.debug("SwifterSwift toJSONString: \(json?.jsonString(prettify: true) ?? "")")
打印结果:
- SwifterSwift toJSONString: {"promoted":0,"mobilePhone":"186****9319","userId":0} - SwifterSwift toJSONString: { "promoted" : 0, "mobilePhone" : "186****9319", "userId" : 0 }
-
-
Dictionary
转JSONString
-
直接用
SwifterSwift
转JSONString
就可以了let json = ["key1": "value", "key2": "value2"] log.debug("SwifterSwift toJSONString: \(json.jsonString() ?? "")") log.debug("SwifterSwift toJSONString: \(json.jsonString(prettify: true) ?? "")")
打印结果:
- SwifterSwift toJSONString: {"promoted":0,"mobilePhone":"186****9319","userId":0} - SwifterSwift toJSONString: { "key2" : "value2", "key1" : "value" }
打印结果:
{ "key2" : "value2", "key1" : "value1" }
-
SwiftyJSON
let json = ["key1": "value", "key2": "value2"] as? [String: Any] print(JSON(json))
这里将可选项用
SwiftyJSON
包装了一下再去打印就不会有转译符了 -
利用
NSString
去转义符let dic = ["key1": "value1", "key2": "value2"] let data = try JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted) print(NSString(string: String(data: data, encoding: .utf8) ?? ""))
-
Moya
自带插件NetworkLoggerPlugin
可以直接帮助我们打印网络相关的信息, 而且不包含转译符
-
以上的写法都能够满足日常的控制台输出查看, 可复制到其他格式解析工具中查看, 接下来专门对比下可选项值类型的打印结果
let json = ["key1": "value", "key2": "value2"] as? [String: Any]
print(["key1": "value", "key2": "value2"])
print(json?.jsonString())
print(json!.jsonString())
print(json?.jsonString() ?? "")
print("拼接: \(json?.jsonString())")
print("拼接: \(json!.jsonString())")
print("拼接: \(json?.jsonString() ?? "")")
输出结果
["key1": "value", "key2": "value2"]
Optional("{\"key1\":\"value\",\"key2\":\"value2\"}")
Optional("{\"key1\":\"value\",\"key2\":\"value2\"}")
{"key1":"value","key2":"value2"}
拼接: Optional("{\"key1\":\"value\",\"key2\":\"value2\"}")
拼接: Optional("{\"key1\":\"value\",\"key2\":\"value2\"}")
拼接: {"key1":"value","key2":"value2"}
通过对比输出结果可以观察到可选值在不同的解包打印后的效果