簡體   English   中英

如何在 swift 中循環遍歷嵌套的 json 對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM