Swift中的JSONDecoder无法工作

5

我观看了WWDC 102会话并尝试使用JSONDecoder进行建模,但我有一个问题,这是我的结构体:

public struct DataListResult:Codable{
    let _id : String
    let createdAt : String
    let desc : String
    let images : Array<String>
    let publishedAt : String
    let source : String
    let type : String
    let url : String
    let used : Int
    let who : String
}

public struct DataListModel:Codable{

    let results : [DataListResult]
    let error: Bool
}

JSON:

{
  "results" : [
    {
      "_id" : "59266a79421aa92c73b6475c",
      "images" : [
        "http:\/\/img.gank.io\/875a9508-3a1e-4d4b-8b91-c111ea62871a"
      ],
      "source" : "chrome",
      "who" : "S",
      "publishedAt" : "2017-05-25T13:32:48.92Z",
      "used" : true,
      "createdAt" : "2017-05-25T13:24:09.35Z",
      "type" : "iOS",
      "desc" : "iOS ",
      "url" : "https:\/\/github.com\/adamzjk\/iOS-ObjectDetection"
    },
    {
      "_id" : "592502d6421aa92c769a8bac",
      "images" : [
        "http:\/\/img.gank.io\/44e8aa0a-b66f-4a5b-9cb0-74c3ae9fc156"
      ],
      "source" : "chrome",
      "who" : "S",
      "publishedAt" : "2017-05-24T12:09:25.526Z",
      "used" : true,
      "createdAt" : "2017-05-24T11:49:42.14Z",
      "type" : "iOS",
      "desc" : "Whatʼs new in Swift 4",
      "url" : "https:\/\/github.com\/ole\/whats-new-in-swift-4"
    },
    {
      "_id" : "5923a438421aa92c73b64743",
      "images" : [
        "http:\/\/img.gank.io\/25762b53-b2ba-4c1c-9666-1683cd72bb82"
      ],
      "source" : "chrome",
      "who" : "who",
      "publishedAt" : "2017-05-23T11:14:05.141Z",
      "used" : true,
      "createdAt" : "2017-05-23T10:53:44.853Z",
      "type" : "iOS",
      "desc" : "music",
      "url" : "https:\/\/github.com\/HarshilShah\/DeckTransition"
    }
  ],
  "error" : false
}

属性images无法解码,因为我删除了它后可以成功,但我不知道如何修复,请告诉我,谢谢。

 do
            {
                let model = try JSONDecoder().decode(DataListModel.self, from: response.data!)

            }catch let error as NSError {

               print("\(error)") //Error Domain=Swift.DecodingError Code=2 "(null)"


            }

--------- last update 2017.6.17 ----------

let images : Array<String> -> let images : Array<String>? 

当图片为空时,它需要有可选属性。谢谢你的帮助。


使用您在问题中提供的JSON和结构体,let object = try JSONDecoder().decode(DataListModel.self, from: data) 对我来说运行良好,没有错误。请编辑您的问题以向我们展示您如何解码它以及您遇到的精确错误。 - Rob
1个回答

10

属性used应该是Bool类型,但结构已经被正确解码。


do {
    let decoded = try JSONDecoder().decode(DataListModel.self, from: data)
    print(decoded)
} catch {
    print(error)
}

假设 data 是一个 JSON 的 Data 对象。

我正在更新我的问题,因为我移除了Image属性,所以它可以成功解码。 - Karim
同样的问题在这里。 - Charlton Provatas
@Karim,你找到解决方案了吗?我也遇到了同样的问题。 - Jageen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接