首页 > 解决方案 > 具有相同键的 JsonDecoder 解码数组在 swift 中以不同的数据类型出现

问题描述

 let responseData = try JSONDecoder().decode(MenuResponseModel, from: jsonData!)


struct MenuResponseModel : Codable {
  let ratingAverage : Double?
  let ratingcount : Int?
}

示例响应:

[{
"ratingAverage": 3,
"reviewCount": 100,
},{
"ratingAverage": 4.2,
"reviewCount": 10,
}]

ratingAverage ==> 有时它会以“Double”或“Int”的形式出现

有人可以建议我,我怎样才能通过使用 Codable 方法来做到这一点?

标签: swift

解决方案


正如我在评论中所说,Double考虑了Int浮点值和浮点值。

有两个主要问题:

  1. 你必须解码一个数组[MenuResponseModel]
  2. reviewCount与结构成员不匹配ratingcount

这会正确解码 JSON

let jsonString = """
[{"ratingAverage": 3,"reviewCount": 100},
 {"ratingAverage": 4.2,"reviewCount": 10}
]
"""

struct MenuResponseModel : Codable {
  let ratingAverage : Double
  let reviewCount : Int
}

let data = Data(jsonString.utf8)

do {
    let result = try JSONDecoder().decode([MenuResponseModel].self, from: data)
    print(result)
} catch {
    print(error)
}

推荐阅读