问题描述
我需要一种方法将 JSON 解码为 Swift 结构,但不是从 JSON 的顶层开始解码。
例如,我有一些这样的 JSON 响应
{"response": { "name": "John","id": 2"} }
实际上,我只需要带有 name 和 id 字段的嵌套对象,我的结构中不需要顶级“响应”。
所以问题是:
我可以在没有“响应”顶层的情况下解码该嵌套对象吗?
但是如果我能检查一下这个顶级“响应”是否存在,然后解码就好了。
我的 API 返回内部有响应对象的顶级“响应”或内部有错误对象的顶级“错误”,所以我必须在解码前检查是否有错误或响应。
解决方法
您需要包含所有内容,但如果您不想从顶层创建结构,您可以将其解码为字典
struct Person: Decodable {
let id: Int
let name: String
}
do {
let result = try JSONDecoder().decode([String: Person].self,from: data)
if let response = result["response"] {
print(response)
} else if let error = result["error"] {
print(error)
} else {
print("Unknown result from API call")
}
}
,
您可以尝试使用 ObjectMapper 并这样做:Mapping of Nested Objects
func mapping(map: Map) {
name <- map["response.name"]
id <- map["response.id"]
}