【发布时间】:2018-03-12 16:38:10
【问题描述】:
我正在尝试找出处理发送优化 JSON 的 API 的正确或最佳方法。 如果您还没有将优化的 JSON 作为服务器响应,这里有一点背景知识,假设您有一个响应 #color 代码为 #FF2233 服务器发送 {"color" : "FF2233"}, 但是如果代码是 223344,那么服务器会发出 {"color" : 223344} 去掉引号 对于单个对象数组相同,它发送不带括号的对象 到目前为止,这是我在操场上的测试......它有效,但在我看来,这不是解决我要解决的问题的最佳方法。
有没有办法在尝试解码之前检查值的类型,以便我们至少可以尝试正确转换它??
struct Test : Codable {
var a : String?
enum CodingKeys: String, CodingKey {
case a = "a"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
do{
a = try values.decodeIfPresent(String.self, forKey: .a)
}
catch{
a = String(describing: try values.decodeIfPresent(Int.self, forKey: .a)!)
}
}
init(a: String)
{
self.a = a
}
}
var a = Test(a: "FF2233")
var jd = try? JSONEncoder().encode(a)
var jt = String(bytes: jd!, encoding: .utf8)
jt = "{\"a\":223365}"
jd = jt?.data(using: .utf8)
do{
let res = try JSONDecoder().decode(Test.self, from: jd!)
print(res.a!)
} catch{
print(error)
}
【问题讨论】: