gpt4 book ai didi

json - JSON 中的值可以是数组和对象

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

我向服务器发出 HTTP 请求并收到 JSON 文档。我有以下结构来解码 JSON:

struct DocumenJSON: Codable {
let code: Int?
let description: String?
let value: Value?
}

问题是,发出请求“A”时,我收到一个对象值,并使请求“B”成为一个值数组,因此结构应如下所示:

struct DocumenJSONArray: Codable {
let code: Int?
let description: String?
let value: [Value]?
}

如何在 swift 4 中实现这一点而不需要重复代码?

            } catch let jsonErr {
print("Error serializing json:", jsonErr)
do {
document = try JSONDecoder().decode(DocumenJSON.self, from: data)
user = User.init(password: "", email: document?.value?.email ?? "Empty", givenNames: document?.value?.nickname ?? "Empty", familyName: document?.value?.lastname ?? "Empty", phone: document?.value?.nickname ?? "Empty")
} catch let jsonErr2 {
print("Error serializing json2:", jsonErr2)
}
}

最佳答案

一个可能的解决方案是使用单个结构,例如:

extension DocumenJSON: Decodable {
enum CodingKeys: String, CodingKey {
case code
case description
case valueAsObject
case valueAsArray
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
code = try values.decodeIfPresent(Int.self, forKey: .code)
description = try values.decodeIfPresent(String.self, forKey: .description)
valueAsObject = try values.decodeIfPresent(Value.self, forKey: .valueAsObject)
valueAsArray = try values.decodeIfPresent(Array.self, forKey: .valueAsArray)
}
}

现在,每当您调用 DocumenJSON 时,只需检查 valueAsObject 或 valueAsArray 为 nil 的每个属性。

可能不是最漂亮的解决方案,但至少你没有重复结构。

关于json - JSON 中的值可以是数组和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51723591/

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