gpt4 book ai didi

ios - JSON Decodable - 按键搜索

转载 作者:行者123 更新时间:2023-11-28 11:59:46 26 4
gpt4 key购买 nike

我正在尝试编写一些代码以通过 key 从我的 JSON 中获取信息。

JSON 看起来像:

{
"Test Name": {
"schede": {
"info_01": "Info 01",
"info_02": "Info 02",
"info_03": "Info 03",
"info_04": "Info 04",
"info_05": "Info 05"
},
"Info" : "info"
}
}

我希望在应用启动时下载 JSON。JSON 已解码,我想创建一个传递 key 的函数,它将打印我需要的所有信息,例如schede.info_01 或 JSON 上的信息字符串。它就像一个可解码的 JSON

例如,我的 JSON 中的键是:“测试名称”然后,如果您在函数中传递字符串“Test Name”,它将打印每个结果,例如:“Test Name”.schede.info_01 etc

我从链接中获取 JSON

最佳答案

首先从 json 创建你的数据模型:

struct MyData: Codable {
let testName: TestName

enum CodingKeys: String, CodingKey {
case testName = "Test Name"
}
}

struct TestName: Codable {
let schede: [String: String]
let info: String

enum CodingKeys: String, CodingKey {
case schede
case info = "Info"
}
}

如果您不确定您的 JSON 将始终具有特定值,您可以将属性设为可选。

然后创建一个函数来获取数据并解析它:

func getData(url: URL, completion: @escaping (_ data: MyData?, _ error: Error?) -> ()) {
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let receivedData = data else {
completion(nil, error)
return
}

do {
// Check if there is a valid json object and parse it with JSONDecoder
let object = try JSONDecoder().decode(MyData.self, from: receivedData)
completion(object, nil)
} catch {
completion(nil, error)
}
}
task.resume()
}

然后调用你的函数:

    getData(url: URL(string: "https://yourexampleurl.com/myData")!) { (data, error) in
// if you want to use the received data in the UI
// you need to dispatch it back to the main thread
// because dataTask executes it not on the main thread (by default)
DispatchQueue.main.async {
if let info1 = data?.testName.schede["info_01"] {
print("received mt info: \(info1)")
} else {
let errorMessage = error?.localizedDescription ?? "unknown error"
print("error occured: \(errorMessage)")
}
}
}

因为您将 json 结构映射到 Swift 对象,所以您可以使用点运算符访问您的数据:

let info1 = data.testName.schede["info_01"]

您也可以一直为 Schede 对象创建模型,然后您可以像这样访问值,而不是将其解析为字典:

let info1 = data.testName.schede.info1

关于ios - JSON Decodable - 按键搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50303793/

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