【问题标题】:How to decode inconsistent JSON data with Swift如何使用 Swift 解码不一致的 JSON 数据
【发布时间】:2019-09-14 01:33:30
【问题描述】:

第一个问题: 我正在使用这个 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. 

【问题讨论】:

  • 实现你自己的init(from decoder: Decoder)。阅读文档:developer.apple.com/documentation/foundation/…
  • 您可以使用 ObjectMapper pod,从 Mappable 扩展类并创建映射。对象映射器将自动处理从/到 JSON 的映射,如果 JSON 文件中缺少任何键,它会将其值设置为 nil。一、贴一段代码,说明需要时如何使用!

标签: arrays json swift struct decoding


【解决方案1】:

如果您将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]]?
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多