簡體   English   中英

解析 Swift 中的嵌套 JSON 5

[英]parsing nested JSON in Swift 5

無法弄清楚如何為這個嵌套的 JSON 構建結構。 我是如此接近,但錯過了一些東西..

我正在嘗試驗證我是否正確加載...前兩個工作得很好嵌套數據失敗

print(json.pagination.items) // this works
print(json.releases[3].date_added) // this works 
print(json.releases[3].basicInformation?.year) //NOT WORKING, returns nil

這是內置的結構

struct Response: Codable {
    let pagination: MyResult
    let releases: [MyReleases]
}

struct MyResult: Codable {
    var page: Int
    var per_page: Int
    var items: Int
}

struct MyReleases: Codable {
    var date_added: String
    let basicInformation: BasicInformation?
}

struct BasicInformation: Codable {
    let title: String
    let year: Int

    enum CodingKeys: String, CodingKey {
        case title, year
    }
}

我的 JSON 是

{
   "pagination":{
      "page":1,
      "pages":2,
      "per_page":50,
      "items":81,
      "urls":{
         "last":"https://api.discogs.com/users/douglasbrown/collection/folders/0/releases?page=2&per_page=50",
         "next":"https://api.discogs.com/users/douglasbrown/collection/folders/0/releases?page=2&per_page=50"
      }
   },
   "releases":[
      {
         "id":9393649,
         "instance_id":656332897,
         "date_added":"2021-03-28T10:54:09-07:00",
         "rating":2,
         "basic_information":{
            "id":9393649,
            "master_id":353625,
            "master_url":"https://api.discogs.com/masters/353625",
            "resource_url":"https://api.discogs.com/releases/9393649",
            "thumb":"",
            "cover_image":"",
            "title":"Ten Summoner's Tales",
            "year":2016
         }
     }
     ]
}

任何幫助將不勝感激。 我是如此接近,但錯過了一些東西...... :(

首先

json.releases[3].date_added

不適用於給定的 JSON,它會崩潰,因為只有一個release


MyReleases中,您必須將CodingKeys添加到 map 蛇案例名稱

struct MyReleases: Codable {
    var dateAdded: String
    let basicInformation: BasicInformation?

    private enum CodingKeys: String, CodingKey {
        case basicInformation = "basic_information", dateAdded = "date_added"
    }
}

或者添加.convertFromSnakeCase密鑰解碼策略。

您甚至可以使用.iso8601日期解碼策略將dateAdded解碼為Date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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