问题描述
我正在尝试为我的应用程序解码一些json,通常我会这样做。
我的结构;
struct RequestTypes: Codable {
let MerchRequestTypeID: Int?
let TypeName: String?
let LayoutID: Int?
private enum CodingKeys: Int,CodingKey {
case MerchRequestTypeID
case TypeName
case LayoutID
}
}
然后解码;
func downloadRequestTypesJson(){
guard let gitUrl = URL(string: "URL") else { return }
URLSession.shared.dataTask(with: gitUrl) { (data,response,error) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
let RequestData = try decoder.decode(Array<RequestTypes>.self,from: data)
dispatchQueue.main.sync {
print(RequestData[0].MerchRequestTypeID)
print(RequestData[1].MerchRequestTypeID)
print(RequestData[2].MerchRequestTypeID)
}
} catch let err {
print("Err",err)
}
}.resume()
}
这对于下面的json很好;
[
{
"MerchRequestTypeID": 1,"TypeName": "Stok","LayoutID": 1
},{
"MerchRequestTypeID": 2,"TypeName": "Stand","LayoutID": 2
},{
"MerchRequestTypeID": 3,"TypeName": "Eğitim","LayoutID": 2
}
]
但是现在我需要解码此json并即时获取 期望解码Array,但是找到了字典。 错误;
{
"RequestTypes": [
{
"MerchRequestTypeID": 1,"TypeName": "Stock","TypeName": "Education","LayoutID": 2
}
]
}
找不到正确的方法来执行此操作。任何帮助表示赞赏。
编辑: 我是Swift的初学者。我想知道如何解码第二个json以及如何到达其元素。
解决方法
那是因为您尝试使用“ RequestTypes”属性而非数组来解码JSON对象。一种解决方案是为此数据结构创建一个新结构,并使用该结构来解码JSON:
struct RequestTypesContainer: Codable {
let RequestTypes : [RequestTypes]
private enum CodingKeys: String,CodingKey {
case RequestTypes
}
}
然后:
let RequestData = try decoder.decode(RequestTypesContainer.self,from: data)