Swift:用未知键解码 JSON? [复制]

Posted

技术标签:

【中文标题】Swift:用未知键解码 JSON? [复制]【英文标题】:Swift: decode JSON with unknown keys? [duplicate] 【发布时间】:2021-10-07 08:29:44 【问题描述】:

我想解码一个简单的 JSON 文件,问题是顶部的键都不同:


    "pikachu": 
        "name": "Pikachu",
        "number": 25
    ,
    "bulbasaur": 
        "name": "Bulbasaur",
        "number": 1
    ,
    "caterpie": 
        "name": "Caterpie",
        "number": 10
       

到目前为止我有这个模型:

struct Pokemon: Decodable 
    //var key: ?
    var pokemonInfo: PokemonInfo


struct PokemonInfo: Decodable 
    var name: String
    var number: Int

但是我不知道如何设置Pokemon 的密钥,以及作为JSONDecoder 的参数传递的内容。

let decodedResult = try JSONDecoder().decode([Pokemon].self, from: data)

typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [], debugDescription: "本应解码 Array 但找到了字典。", underlyingError: nil))

在这里做什么?

感谢您的帮助

【问题讨论】:

【参考方案1】:

JSON 中没有数组也没有键 pokemonInfo

由于密钥实际上无关紧要,最简单的解决方案是解码[String:PokemonInfo]并将其映射到values

let decodedResult = Array(try JSONDecoder().decode([String:PokemonInfo].self, from: data).values)

【讨论】:

以上是关于Swift:用未知键解码 JSON? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Swift 中解析 JSON。 “应解码 Dictionary<String, Any>,但找到了一个数组。” [复制]

如何在 Swift 中使用动态键(在根级别)解码此 JSON?

用一个结构解码两个不同的 JSON 响应? [复制]

golang 解码未知键的 json 字符串

带有可配置键的 Swift 4 JSON 解码

使用 swift Codable 以值作为键来解码 JSON