[英]Parsing Nested JSON SWIFT 4
誰能告訴我我在做什么錯?
這是我要解析的JSON:
{
"results": {
"AF": {
"alpha3": "AFG",
"currencyId": "AFN",
"currencyName": "Afghan afghani",
"currencySymbol": "؋",
"id": "AF",
"name": "Afghanistan"
},
"AI": {
"alpha3": "AIA",
"currencyId": "XCD",
"currencyName": "East Caribbean dollar",
"currencySymbol": "$",
"id": "AI",
"name": "Anguilla"
}
}
}
我的代碼:
class Results: Codable {
let results: [Country]
init(results: [Country]) {
self.results = results
}
}
class Country: Codable {
let currencyId: String
let currencyName: String
let currencySymbol: String
let id: String
let name: String
init(currencyId :String, currencyName: String, currencySymbol: String, id: String, name: String ) {
self.currencyId = currencyId
self.currencyName = currencyName
self.currencySymbol = currencySymbol
self.id = id
self.name = name
}
}
我看過Apple的有關解碼嵌套結構的文檔,但我仍然不明白如何正確地執行JSON的不同級別。
謝謝。
檢查鍵"results"
的輪廓值。
"results": {
...
}
{...}
表示JSON對象。 在某些情況下,Swift struct
(或class
如果您認為更好的話)將適用於JSON對象。
在其他情況下,快速Dictionary
可能更合適。
並且此JSON對象的每個值都采用以下形式:
{
"alpha3": ...,
"currencyId": ...,
"currencyName": ...,
"currencySymbol": ...,
"id": ...,
"name": ...
}
與您的Country
匹配。
所以,你只需要改變的類型, results
在你的Results
類。
class Results: Codable {
let results: [String: Country]
init(results: [String: Country]) {
self.results = results
}
}
對於屬性及其類,使用相同的名稱(不區分大小寫)在將來可能會引起一些混亂,但是我還是照原樣保留它。
您可以像這樣測試它:
(假設要在具有修改過的Results
和您所在的Country
的操場上進行測試。)
let jsonText = """
{
"results": {
"AF": {
"alpha3": "AFG",
"currencyId": "AFN",
"currencyName": "Afghan afghani",
"currencySymbol": "؋",
"id": "AF",
"name": "Afghanistan"
},
"AI": {
"alpha3": "AIA",
"currencyId": "XCD",
"currencyName": "East Caribbean dollar",
"currencySymbol": "$",
"id": "AI",
"name": "Anguilla"
}
}
}
"""
let jsonData = jsonText.data(using: .utf8)!
let decoder = JSONDecoder()
do {
let results = try decoder.decode(Results.self, from: jsonData)
print(results) //-> __lldb_expr_1.Results
} catch {
print(error)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.