在使用SWIFT的iPhone应用程序中,我必须处理第三方API,该API发送转义的字符串而不是JSON对象作为响应。
响应如下:
"[
{
\"ID\":3880,
\"Name\":\"Exploration And Production Inc.\",
\"ContractNumber\":\"123-123\",
\"Location\":\"Booker #1\",
\"Volume\":1225.75,
\"OtherFees\":10.0
}
]"
到目前为止,我一直通过处理字符串以删除不需要的字符来处理此问题,直到得到类似JSON的字符串,然后照常进行解析。
Angular有一个方便的功能可以解决此问题:
angular.fromJson(response.data);
Java有自己的处理方式。在Swift中是等效功能吗?
答案 0 :(得分:1)
如果要将其解析为字典,则最简单的解决方案是将String
转换为Data
并使用JSONSerialization
:
if let data = string.data(using: .utf8) {
do {
let responseArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]]
print(responseArray)
}
catch {
print(error)
}
}
但是,当然最好将其作为Codable
模型进行处理,在这种情况下,其处理方法同样简单:
try JSONDecoder().decode([Item].self, from: data)
提供了有效的Decodable
模型,如下所示:
struct Item: Decodable {
let id: Int
let name: String
//add the other keys you want to use (note its type sensitive)
enum CodingKeys: String, CodingKey {
case id = "ID"
case name = "Name"
}
}
最后,请避免使用字符串化的json,因为它很容易导致错误。
字符串变形或结构中的小/大偏差很容易被忽视。
让后端团队知道他们应该遵循其使用者可以依赖的API协议。
通过设置json格式,其本质上就像是一个合同,可以清晰地展示其内容和目的。
发送字符串化的json完全是懒惰的,对其设计者imho的反映很差。