gpt4 book ai didi

arrays - macOS - 从 Raw Github 获取 JSON 数据 + 解析

转载 作者:行者123 更新时间:2023-12-04 15:03:17 25 4
gpt4 key购买 nike

我正在尝试从 githubusercontent(URL:https://raw.githubusercontent.com/nacrt/SkyblockClient-REPO/main/files/mods.json)获取 json 到 Swift 文件中,然后将其转换为我可以操作的内容,例如,使用 enabled(下方)选中/取消选中复选框。有问题的 JSON 实际上是一个 JSON 数组,这是主要问题。我不确定下面的代码是否有效,因为我还没有导入 JSON。

到目前为止,我发现了这个:

struct ModsJSON: Decodable {
let id: String
let display: String
let description: String
let url: String
let config: Bool?
let enabled: Bool
let hidden: Bool
let icon: String
let categories: Array<String>
let actions: Array<OptionAction>?
let warning: ActionWarning?
}

let jsonData = JSON.data(using: .utf8)! //JSON being the imported json
let mods_json: [ModsJSON] = try! JSONDecoder().decode([ModsJSON].self, from: jsonData)

我是 swift 的初学者,我意识到这应该很容易,但我在任何地方都找不到实用的答案。

macOS Big Sur - 最新的 Swift 和 Xcode 版本。

最佳答案

这对初学者来说并不容易,您必须使用 URLSession 异步加载数据。

JSON 字典中的某些键缺失,因此您必须将更多结构成员声明为可选。

缺少键 actionswarning 的类型,我把它们注释掉了,没有它们代码也能工作

struct Mod: Decodable {
let id: String
let display: String
let description: String
let url: String?
let config: Bool?
let enabled: Bool?
let hidden: Bool?
let icon: String?
let categories: [String]?
// let actions: Array<OptionAction>?
// let warning: ActionWarning?
}

let url = URL(string: "https://raw.githubusercontent.com/nacrt/SkyblockClient-REPO/main/files/mods.json")!

let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error { print(error); return }
do {
let result = try JSONDecoder().decode([Mod].self, from: data!)
print(result)
} catch { print(error) }
}
task.resume()

你的代码中有一些不好的做法:

  • 如果可能发生错误,请始终使用 do - catch block 而不是 try!
  • Swift 中的变量名是 lowerCamelCase 而不是 snake_case
  • 不要注释编译器可以推断的类型。
  • 数组中使用的结构应以单数形式 (Mod) 命名,JSON 后缀毫无意义。

关于arrays - macOS - 从 Raw Github 获取 JSON 数据 + 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66589324/

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