如何解码以“开始”开头的JSON;[“使用swift可编码协议
我遇到了来自服务器的JSON响应,需要处理它 基本上,JSON的根级别是数组而不是字典。例如:如何解码以“开始”开头的JSON;[“使用swift可编码协议,json,swift,codable,Json,Swift,Codable,我遇到了来自服务器的JSON响应,需要处理它 基本上,JSON的根级别是数组而不是字典。例如: [ { "name": "Joe", "age": 50 }, ] 我已经构建了一个符合Codable的结构: struct response: Codable { let responseArray: [Person] } struct person: Codable { let name: String let age: Int enu
[
{
"name": "Joe",
"age": 50
},
]
我已经构建了一个符合Codable的结构:
struct response: Codable {
let responseArray: [Person]
}
struct person: Codable {
let name: String
let age: Int
enum CodingKeys: String, CodingKey {
case name = "name"
case age = "age"
}
}
我在尝试解码时遇到以下错误:
▿ DecodingError
▿ typeMismatch : 2 elements
- .0 : Swift.Dictionary<Swift.String, Any>
▿ .1 : Context
- codingPath : 0 elements
- debugDescription : "Expected to decode Dictionary<String, Any> but found an array instead."
- underlyingError : nil
▿ 解码误差
▿ 类型不匹配:2个元素
-.0:Swift.字典
▿ .1:背景
-编码路径:0个元素
-debugDescription:“应解码字典,但找到了数组。”
-参考误差:零
如果数组未命名,是否有方法使用编码键处理该数组
如果不是,人们将如何处理这种情况?json的根是一个数组,dodeocde应该是
[Person]。self
您可以试试
struct Person: Codable {
let name: String
let age: Int
}
显示您对
解码的调用。
。数组没有“命名”,我想您想到的是字典和它们的键。我尝试了最明显的方法来实现这一点,这让我大吃一惊!成功了:我尝试了解码[个人].self而不是response。@DavidChopin你是对的。我将编辑我的问题,以更具体地说明响应不是字典。在这里,用大写字母启动结构名称您不需要enum CodingKey:String,CodingKey{
let res = try? JSONDecoder().deocde([Person].self,from:data)
print(res)