Swift 如何知道 json 键是否为空或没有键?
Swift how to know if json key is null or no key?
我有一个结构,它反映来自 nesed JSON 的数据,带有 nilable 变量。
struct JsonReceived: Decodable {
let data: JsonReceivedData
}
struct JsonReceivedData: Decodable {
let key1: String?
let key2: String?
let key3: String?
let key4: String?
let key5: String?
}
然后我用 JSONDecoder
对 json 进行编码并将其数据发送到函数。
let res = try JSONDecoder().decode(JsonReceived.self, from: data)
self.addData(res.data.key1)
self.addData(res.data.key2)
self.addData(res.data.key3)
self.addData(res.data.key4)
self.addData(res.data.key5)
问题是,有时 JSON 数据看起来像这样
{
"data": {
"key1": "value1",
"key3": "value3",
"key5": null,
}
}
如果密钥不存在,我不想从函数发送数据,
正如您在我的 JSON 示例中看到的那样,没有 key2
和 key4
键值对,所以我不想将它们发送到函数, key5
是 null 但它仍然有一个键,所以我希望它发送到函数,即使它是 null。
我希望输出是这样的。
if isHaveAkeyFromJSON(res.data.key2) {
self.addData(res.data.key2)
}
res
不知道是怎么创建的。有值的键有值,没有值的键没有值。如果您需要该信息,您需要再次查看接收 JSON。
let testDictionary = try decoder.decode([String: String?].self, from: data)
然后测试字典中的键:
if testDictionary.keys.contains(res.key2) {
self.addData(res.key2)
}
如果您不需要用于其他用途的结构,那么您可以一次解码并调用您的方法
struct JsonReceived: Codable {
let data: [String: String?]
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
data = try container.decode([String: String?].self, forKey: .data)
data.values.forEach {
self.addData([=10=])
}
}
}
我有一个结构,它反映来自 nesed JSON 的数据,带有 nilable 变量。
struct JsonReceived: Decodable {
let data: JsonReceivedData
}
struct JsonReceivedData: Decodable {
let key1: String?
let key2: String?
let key3: String?
let key4: String?
let key5: String?
}
然后我用 JSONDecoder
对 json 进行编码并将其数据发送到函数。
let res = try JSONDecoder().decode(JsonReceived.self, from: data)
self.addData(res.data.key1)
self.addData(res.data.key2)
self.addData(res.data.key3)
self.addData(res.data.key4)
self.addData(res.data.key5)
问题是,有时 JSON 数据看起来像这样
{
"data": {
"key1": "value1",
"key3": "value3",
"key5": null,
}
}
如果密钥不存在,我不想从函数发送数据,
正如您在我的 JSON 示例中看到的那样,没有 key2
和 key4
键值对,所以我不想将它们发送到函数, key5
是 null 但它仍然有一个键,所以我希望它发送到函数,即使它是 null。
我希望输出是这样的。
if isHaveAkeyFromJSON(res.data.key2) {
self.addData(res.data.key2)
}
res
不知道是怎么创建的。有值的键有值,没有值的键没有值。如果您需要该信息,您需要再次查看接收 JSON。
let testDictionary = try decoder.decode([String: String?].self, from: data)
然后测试字典中的键:
if testDictionary.keys.contains(res.key2) {
self.addData(res.key2)
}
如果您不需要用于其他用途的结构,那么您可以一次解码并调用您的方法
struct JsonReceived: Codable {
let data: [String: String?]
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
data = try container.decode([String: String?].self, forKey: .data)
data.values.forEach {
self.addData([=10=])
}
}
}