[英]How to loop through nested json objects in swift?
我一直在嘗試從以下 google API 檢索 Postal_code 但無法循環遍歷 JSON 數組
這是解析JSON的函數
func parseJson(Json:Data) {
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(MapModel.self, from: Json)
let postal_code = decodedData.results[0].address_components[0].long_name
print(postal_code)
} catch {
print(error)
return
}
}
這是模型:
struct MapModel: Decodable {
let results : [Result]
let status: String
let plus_code : compoundCode
}
struct compoundCode: Decodable {
let compound_code: String
}
struct Result: Decodable {
let address_components:[address_components]
}
struct address_components: Decodable {
let long_name : Int
}
這是通過 API 的 JSON
{
"plus_code":{
"compound_code":"5WXX+7J Thane, Maharashtra, India",
"global_code":"7JFJ5WXX+7J"
},
"results":[
{
"address_components":[
{
"long_name":"400604",
"short_name":"400604",
"types":[
"postal_code"
]
},
{
"long_name":"Thane",
"short_name":"Thane",
"types":[
"administrative_area_level_2",
"political"
]
}
]
}
]
}
我得到了以下問題的答案......問題是給定 JSON 對象的鍵“long_name”有多個值......解決方案是遍歷“address_components”並尋找唯一值JSON 對象中的“type”鍵。例如,在這種情況下,鍵“long_name”有兩個值“thane”和“400604”,但唯一鍵是可用於區分這些值的類型
這是以下問題的語法!
func parseJson(Json:Data)
{
let decoder = JSONDecoder()
do{
let decodedData = try decoder.decode(MapModel.self, from: Json)
for item in decodedData.results[0].address_components{
if item.types[0] == "postal_code"{
print(item.long_name)
}
}
}
catch{
print(error)
return
}
}
無法循環是什么意思? 有什么錯誤? 是在編譯時還是在運行時? 據我所能想象的,可能是因為long_name類型,它不是Int,而是字符串。
作為注釋,請嘗試使用Apple編碼約定,例如駝峰式命名。 並搜索編碼鍵,以使您的代碼更具可讀性並遵守這些約定:
struct AddressComponents : Decodable {
let longName : String
enum codingKeys : String, CodingKey {
case longName = "long_name"
}
}
嘗試
for item in decodedData.results {
for inner in item.address_components {
print(inner.long_name)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.