【发布时间】:2020-10-05 12:45:36
【问题描述】:
我正在尝试为我的应用程序解码一些 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",
"LayoutID": 1
},
{
"MerchRequestTypeID": 2,
"TypeName": "Stand",
"LayoutID": 2
},
{
"MerchRequestTypeID": 3,
"TypeName": "Education",
"LayoutID": 2
}
]
}
无法找到正确的方法来执行此操作。任何帮助表示赞赏。
编辑:我是 Swift 的初学者。我想知道如何解码第二个 json 以及如何访问它的元素。
【问题讨论】:
-
let RequestData = try decoder.decode([String: [RequestTypes]].self, from: data) -
你看到有一个新的键“RequestTypes”,你在哪里解码?
-
问题是什么?第二个 JSON 和第一个 JSON 不同,它确实很明显是一个字典,而不是像第一个那样的数组。错误消息和 JSON 告诉你所有需要知道的。
标签: swift xcode swift5 jsondecoder