Swift:使用未知密钥解码 JSON?
Swift: decode JSON with unknown keys?
我想解码一个简单的 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: "Expected to decode Array but found a dictionary instead.", underlyingError: nil))
来这里做什么?
感谢您的帮助
JSON中没有数组也没有键pokemonInfo
。
由于密钥实际上是不相关的,最简单的解决方案是解码 [String:PokemonInfo]
并将其映射到 values
let decodedResult = Array(try JSONDecoder().decode([String:PokemonInfo].self, from: data).values)
我想解码一个简单的 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: "Expected to decode Array but found a dictionary instead.", underlyingError: nil))
来这里做什么?
感谢您的帮助
JSON中没有数组也没有键pokemonInfo
。
由于密钥实际上是不相关的,最简单的解决方案是解码 [String:PokemonInfo]
并将其映射到 values
let decodedResult = Array(try JSONDecoder().decode([String:PokemonInfo].self, from: data).values)