SWIFT 5中的嵌套JSON
尽管有很多关于嵌套json解码的文章,但我仍在努力解决以下问题: 来自json的示例:SWIFT 5中的嵌套JSON,json,swift,xcode,jsondecoder,Json,Swift,Xcode,Jsondecoder,尽管有很多关于嵌套json解码的文章,但我仍在努力解决以下问题: 来自json的示例: { "00AK": { "icao": "00AK", "iata": "", "name": "Lowell Field", "city": "Anchor Point", "state": "Alaska", "country": "US", "elevation": 450,
{
"00AK": {
"icao": "00AK",
"iata": "",
"name": "Lowell Field",
"city": "Anchor Point",
"state": "Alaska",
"country": "US",
"elevation": 450,
"lat": 59.94919968,
"lon": -151.695999146,
"tz": "America\/Anchorage"
},
"00AL": {
"icao": "00AL",
"iata": "",
"name": "Epps Airpark",
"city": "Harvest",
"state": "Alabama",
"country": "US",
"elevation": 820,
"lat": 34.8647994995,
"lon": -86.7703018188,
"tz": "America\/Chicago"
},
"00AZ": {
"icao": "00AZ",
"iata": "",
"name": "Cordes Airport",
"city": "Cordes",
"state": "Arizona",
"country": "US",
"elevation": 3810,
"lat": 34.3055992126,
"lon": -112.1650009155,
"tz": "America\/Phoenix"
},
....
}
我首先用以下结构映射机场细节:
struct Airport : Codable {
var icao:String
var iata:String
var name:String
var city:String
var state:String
var country:String
var elevation: Double
var lat: Double
var lon: Double
var tz: Double
enum CodingKeys : String, CodingKey {
case icao
case iata
case name
case city
case state
case country
case elevation
case lat
case lon
case tz
}
}
但我被卡住了-无法找到如何映射机场代码(00AK、00AL、00AZ)的“母亲”结构,以及如何查找此处解析的解码数据:
let decodedData = try JSONDecoder().decode(AirportsStructToBeCreated.self,
from: jsonData)
(例如,如何查找“00AZ”的“标高”)您必须解码
[String:Airport]
字典
let decodedData = try JSONDecoder().decode([String:Airport].self,
from: jsonData)
或者您可以实现init(从解码器),并将字典映射到数组,因为键也包含在结构中
如果结构成员与字典键完全匹配,则可以省略编码键
而tz
是不是双你必须解码[字符串:机场]
字典
let decodedData = try JSONDecoder().decode([String:Airport].self,
from: jsonData)
或者您可以实现init(从解码器),并将字典映射到数组,因为键也包含在结构中
如果结构成员与字典键完全匹配,则可以省略编码键
如果使用json:[{“icao”:“00AK”,“iata”:“name”:“Lowell Field”,“city”:“Anchor Point”,“state”:“Alaska”,“country”:“US”,“elevation”:450,“lat”:59.94919968,“lon”:-151.695999146,“tz”:“America\/Anchorage”},{…}]它适用于:let decodedata=try JSONDecoder().decode([Airport].self,from:jsonData)…为什么要问一个关于完全不同的JSON结构的问题?抱歉,这是不必要的(只是试图排除代码其余部分中的其他错误),我想使用原始结构,但建议使用“let decodedata=try JSONDecoder().decode”([String:Airport].self,from:jsonData“…给出了解码错误,不知道为什么..什么解码错误
?再次抱歉不清楚:“try”会抛出错误,但如果使用json:[{“icao”:“00AK”,“iata”:“name”:“Lowell Field”,“city”:“锚点”,“state”:“Alaska”,“country”:“US”,“elevation”:450,“lat”:59.94919968,“lon”:-151.695999146,“tz”:“America\/Anchorage”},{…}它与:let decodedata=try JSONDecoder().decode([Airport].self,from:jsonData)…一起工作。为什么要问一个关于完全不同的JSON结构的问题?抱歉,这是不必要的(只是试图排除代码其余部分的其他错误),我想使用原始结构,但您建议的“let decodedata=try JSONDecoder().decode([String:Airport].self,from:jsonData)”…给出了解码错误,并且不明白为什么..什么解码错误
?再次为不清楚而道歉:“try”将抛出错误