swift - 解析json文件后如何访问具体的数组数据?
问题描述
这是JSON:
[
{
"District_en": "Kowloon City",
"Name_en": "Carpenter Road Park",
"GIHS": "9G5i7NFpXL",
"Court_no_en": "4",
"Court_no_cn": "4"
},
{
"District_en": "Kowl",
"Name_en": "Road Park",
"GIHS": "9G5i7NFaXL",
"Court_no_en": "5",
"Court_no_cn": "6"
}
]
这是我的代码:
func loadjson() {
if let url = Bundle.main.url(forResource: "court", withExtension: "json"){
do{
let data = try Data(contentsOf: url)
let decoder = JSONDecoder()
let jsondata = try decoder.decode([Court].self, from: data)
print(jsondata)
} catch {
print(error)
}
}
}
我有一个本地化的 JSON 文件,我知道如何解析文件,但是在解析文件后,我不知道如何访问里面的特定数组数据。
解决方案
当您获取 json 数据时,您需要将其转换为您的模型 Court。Court 应该有一个特殊的初始化程序,将 json 数据转换为模型的属性。像这样:
struct Court: Codable {
var district: String
var name: String
// and so on
init?(json: [String: Any]) {
guard let district = json["District_en"] as? String,
let name = json["Name_en"] as? String else {
return nil
}
self.district = district
self.name = name
}
}
然后您可以从 json 数据中获取模型:
let jsonData = try JSONSerialization.jsonObject(with: data, options: [])
if let json = jsonData as? [[String: Any]] {
let array = json.compactMap(Court.init)
print(array)
}
// Prints: [Court(district: "Kowloon City", name: "Carpenter Road Park"), Court(district: "Kowl", name: "Road Park")]
推荐阅读
- c# - MapControl 是否有任何功能允许第二张地图与第一张地图保持一致?IE:缩放/位置
- qml - 将 GridLayout 行移到顶部
- r - 如何编写一个函数来从多个列表中获取第三个元素?
- r - 在 R plotly 中为带有线迹的堆叠条形图创建辅助轴
- keycloak - 如何创建自定义 Keycloak 主题?
- sql - 创建表 - Oracle APEX 错误:是什么导致了我的 CREATE TABLE sql 脚本中的错误?
- node.js - CastError 与 GET 端点但不是与 Express / Mongoose 中的 POST 端点?
- r - 基于以 R 结尾的元素分组
- .net-core - 错误解组数据'\''寻找值 Ghz 到 gRPC 的开头
- python - 如何处理 Pandas 中的缺失值