arrays - macOS - 从 Raw Github + Parsing 获取 JSON 数据
问题描述
我正在尝试将 json 从githubusercontent
(URL: https://raw.githubusercontent.com/nacrt/SkyblockClient-REPO/main/files/mods.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 字典中的某些键丢失了,因此您必须将更多结构成员声明为可选。
键actions
和warning
缺失的类型,我将它们注释掉,没有它们的代码也可以工作
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()
您的代码中有一些不好的做法:
- 如果可能发生错误,而不是
try!
始终使用块。do - catch
- Swift 中的变量名是
lowerCamelCase
而不是snake_case
. - 不要注释编译器可以推断的类型。
- 数组中使用的结构应以单数形式 (
Mod
) 命名,并且JSON后缀是没有意义的。
推荐阅读
- iiif - 清单未在查看器上显示
- swift - TableView 在更新其宽度约束时意外自动滚动
- continuous-deployment - 如何编写一个从另一个 Bamboo 计划获取内部版本号的新 Bamboo 计划?
- javascript - 如何在javascript中将\"改回"?
- javascript - 尝试使用 PHP 循环 HTML 按钮并使用 querySelector 在 JS 中添加一个 EventListener 但只有第一个迭代按钮被选中
- python-3.x - 列表中的排列
- oracle - 2个表空间之间的数据迁移
- android - change name of native shared library AAR and binary in android studio
- python - Pyro4 python模块工作流程及其应用
- php - 直到现在我的 wiki 工作正常,突然出现这个错误,怎么办?