gpt4 book ai didi

ios - 提要不一致时解码 JSON - Swift

转载 作者:行者123 更新时间:2023-11-28 10:30:30 24 4
gpt4 key购买 nike

当提要给我两个不同的结果时,我不知道如何使用可解码协议(protocol)快速处理 JSON 提要。如果有多个‘entry’,json看起来像这样,entry值是一个对象数组

{
"feed": {
"publisher": "Penguin",
"country": "ca"
},
"entry": [
{
"author": "Margaret Atwood",
"nationality": "Canadian"
},
{
"author": "Dan Brown",
"nationality": "American"
}
]
}

但是,如果只有一个条目,则 json 看起来像这样,其中条目只是一个字典

{
"feed": {
"publisher": "Penguin",
"country": "ca"
},
"entry": {
"author": "Margaret Atwood",
"nationality": "Canadian"
}
}

为了解码第一种情况,我会使用以下结构

struct Book: Decodable {
let feed: Feed
let entry: [Entry]
}

// MARK: - Entry
struct Entry: Decodable {
let author, nationality: String
}

// MARK: - Feed
struct Feed: Decodable {
let publisher, country: String
}

然后使用类似这样的方法对检索到的数据进行解码

 let  object = try JSONDecoder().decode(Book.self, from: data)

如果条目不是对象的数组,我该如何处理?

最佳答案

您可以覆盖 Book 的解码器。您可以做的是尝试解包一个 [Entry],如果失败,就尝试解包一个 Entry。

例如:

struct Book: Decodable {
let feed: Feed
let entry: [Entry]
init (from decoder :Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
do {
value = try container.decode([Entry].self, forKey: .value)
} catch {
let newValue = try container.decode(Entry.self, forKey: .value)
value = [newValue]
}
}
}

注意:这不是关于您想做什么的综合示例,而只是您可以完成您想做的事情的一种方式

关于ios - 提要不一致时解码 JSON - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com