gpt4 book ai didi

ios - 使用数据模型正确解析嵌套的 JSON 以进行多次重用。 swift

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

我正在尝试找到解析嵌套 JSON 的最佳解决方案。我知道有很多解析 JSON 的方法示例,但有人告诉我最佳做法是为我希望提取的数据制作一个Class/Struct 模型。

这是一个示例 JSON 数据:

{
"description": "Birds of Antarctica, grouped by family",
"source": "https://en.wikipedia.org/wiki/List_of_birds_of_Antarctica",
"birds": [
{
"family": "Albatrosses",
"members": [
"Wandering albatross",
"Grey-headed albatross",
"Black-browed albatross",
"Sooty albatross",
"Light-mantled albatross"
]
},
{
"family": "Terns",
"members": [
"Arctic tern",
"Antarctic tern"
]
}
]
}

这是我的鸟类类:

class Birds {

let family: String?
let members: String?

init?(json: JSON) {

guard let family = json["family"] as? String, let members = json["members"] as? String else { return nil }

self.family = family
self.members = members

}
}

这是我的数据服务:

typealias JSON = [String: Any]

class DataService {

private init() {}
static let shared = DataService()

func getData(completion: (Data) -> Void) {

guard let path = Bundle.main.path(forResource: "bird_data", ofType: "json") else {return}

let url = URL(fileURLWithPath: path)

do {

let data = try Data(contentsOf: url)
completion(data)

} catch {
print(error.localizedDescription)

}
}

最后这是我在 viewController 中调用它的方式:

func getData() {
DataService.shared.getData { (data) in
do {
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? JSON else { return }

print(json)
} catch {
print(error)
}
}
}

那么我怎样才能只打印 family 并将其显示在表格上呢?如果已经有一个明确的例子,请纠正我。

我知道有很多第三方可以提供帮助,例如 SwiftyJSONGloss,但我想以标准方式理解它。

最佳答案

我认为根据你的 json 的结构,你需要形成两个模型类,一个用于整个 json,一个用于个别的鸟,所以你可以这样做:

class Bird {

let family: String?
let members: [String]?

init?(json: JSON) {

guard let family = json["family"] as? String, let members = json["members"] as? [String] else { return nil }

self.family = family
self.members = members

}
}


class JsonData {

var birds: [Bird]?
var description: String?
var sourceUrl: String?

init?(json: JSON) {

guard let description = json["description"] as? String, let sourceUrl = json["source"] as? String, let birds = json["birds"] as? [JSON] else { return nil }

self.description = description
self.sourceUrl = sourceUrl
self.birds = [Bird]()
for singleBird in birds {
let singleBirdObj = Bird(singleBird)
self.birds?.append(singleBirdObj)
//you can add birds to shared manager array like this (after discussion with OP)
BirdManager.shared.appendBird(singleBirdObj)
}

}

}


func getData() {
DataService.shared.getData { (data) in
do {
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? JSON else { return }

let jsonDataObject = JsonData(json)
//here you have jsonDataObject that has all the json data

print(print(jsonDataObject?.description))
} catch {
print(error)
}
}
}

关于ios - 使用数据模型正确解析嵌套的 JSON 以进行多次重用。 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46602937/

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