debugDescription: “Expected to decode Array but found a dictionary instead.”, underlyingError: nil)

前端 未结 3 671
粉色の甜心
粉色の甜心 2021-01-13 06:48

I want to load an online json file into my application, but I am running into this error:

typeMismatch(Swift.Array, Swift.DecodingError.Context(codi

3条回答
  •  情深已故
    2021-01-13 07:14

    Please learn to understand the decoding error messages, they are very descriptive.

    The error says you are going to decode an array but the actual object is a dictionary (the target struct).

    First take a look at the beginning of the JSON

    {
      "copyright" : "NHL and the NHL Shield are registered trademarks of the National Hockey League. NHL and NHL team marks are the property of the NHL and its teams. © NHL 2018. All Rights Reserved.",
      "totalItems" : 2,
      "totalEvents" : 0,
      "totalGames" : 2,
      "totalMatches" : 0,
      "wait" : 10,
      "dates" : [ {
        "date" : "2018-05-04",
    

    It starts with a { which is a dictionary (an array is [) but you want to decode an array ([Dates]), that's the type mismatch the error message is referring to.


    But this is only half the solution. After changing the line to try decoder.decode(Dates.self you will get another error that there is no value for key copyright.

    Look again at the JSON and compare the keys with the struct members. The struct whose members match the JSON keys is Initial and you have to get the dates array to populate gameData.

    let jsondata = try decoder.decode(Initial.self, from: detailData)
    gameData = jsondata.dates
    

提交回复
热议问题