首页 > 解决方案 > 如何使用 Swift 解码不一致的 JSON 数据

问题描述

第一个问题:我正在使用这个JSON类型的API,但是有一些不一致的数据,在下面的例子中有一个度量数组,有时只包含“uri”和“label”,但有时它有一个嵌套“合格”的数组。我正在尝试使用结构在 Swift 9.2 版中对此进行解码。如何处理不一致的数组?

第二个问题:“措施”在某些地方被称为“措施”。如何处理不一致的标签?

"measures" : [ {
    "uri" : "http://www.edamam.com/ontologies/edamam.owl#Measure_serving",
    "label" : "Serving"
}, {
    "uri" : "http://www.edamam.com/ontologies/edamam.owl#Measure_stalk",
    "label" : "Stalk",
    "qualified" : [ [ {
        "uri" : "http://www.edamam.com/ontologies/edamam.owl#Qualifier_medium",
        "label" : "medium"
    }]]

}]
struct Hints: Codable {
    let food: Food
    let measures: [Measure]
}
struct Measure: Codable {
    let uri: String
    let label : String
    let qualified : [[Qualified]]
}
struct Qualified: Codable {
    let uri: String
    let label : String
}


I really appreciate your help. 

标签: arraysjsonswiftstructdecoding

解决方案


如果您将该qualified属性设为可选,您的解码将起作用

struct Measure: Codable {
    let uri: String
    let label : String
    let qualified : [[Qualified]]?
}

由于 Qualified 包含作为 Measure 的前两个属性,而我们将最后一个属性设为可选,您甚至可以不使用 Qualified 并像这样定义 Measure

struct Measure: Codable {
    let uri: String
    let label : String
    let qualified : [[Measure]]?
}

推荐阅读