gpt4 book ai didi

json - swift最新版如何获取三层及以上的json数据

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

我正在尝试从此 json 文件“321”、日期“654”和“@attributes”中“数字”的值“123”获取出勤值。我已经设法过滤了级别,但我想知道是否有更有效的方法来访问大于三级别的值。或者csharp中有没有类似linq的库。

我可以直接跳转到“GameData”并获取所有 GameData 并存储到一个对象列表中吗?

或者只是一条链例如:

json["level1"].["level2"].["level3"]

JSON:

{
"Feed":{
"Doc":{
"Comp": {
},
"GameData": {
"GameInfo": {
"Attendance": 321,
"Date": 654,
"ID": 00
}
},
"GameData": {
"GameInfo": {
"Attendance": 321,
"Date": 654
"ID": 01
}
}
},
"@attributes": {
"Number": 123
}
}
}

代码:

let json = try JSONSerialization.jsonObject(with: data!,      options: .mutableContainers) as! [String: AnyObject]
if let articlesFromJson = json["Feed"] as? [String: AnyObject]{
print("level1")
if let aFromJson = articlesFromJson["Doc"] as? [String: AnyObject]{
print("level2")
if let aFromJson = articlesFromJson["GameData"] as? [String: AnyObject]{
print(aFromJson)

}
}
}

最佳答案

我很喜欢SwiftyJson这让你可以:

import SwiftyJSON
let json = JSON(data: data)
let game = json["Feed"]["Doc"]["GameData"] // this is of type JSON

let attendance = game["GameInfo"]["Attendance"].string ...

let number = json["Feed"]["@attributes"]["Number"].string // this is of type String?
let number = json["Feed"]["@attributes"]["Number"].stringValue // this is of type String, and will crash if the value is missing

=== 编辑:关于重复标签的信息 ===

JSON 本身不会阻止您这样做:https://stackoverflow.com/a/21833017/2054629但您会发现大多数图书馆将 JSON 理解为字典和数组,并且这些结构不能有重复的键。

例如,您可以在浏览器控制台中测试的 javascript:

JSON.stringify(JSON.parse('{"a": 1, "a": 2}')) === '{"a": 2}'

我相信 SwiftyJson 的行为类似。所以我建议您将 JSON 结构更改为:

{
"Feed":{
"Doc":{
"Comp": {},
"GameData": {
"GamesInfo": [
{
"Attendance": 321,
"Date": 654,
"ID": 0
},
{
"Attendance": 321,
"Date": 654
"ID": 1
}
]
},
},
"@attributes": {
"Number": 123
}
}
}

关于json - swift最新版如何获取三层及以上的json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386457/

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