gpt4 book ai didi

json - 使用 Swift 访问 JSON 中的嵌套字典

转载 作者:行者123 更新时间:2023-11-28 05:48:50 25 4
gpt4 key购买 nike

我想解析以下 JSON为了从维基百科的 API 中获取随机文章的 ID 并在 Swift 中使用它:

{
"batchcomplete": "",
"continue": {
"rncontinue": "0.067678657404|0.067678667039|13394072|0",
"continue": "-||"
},
"query": {
"random": [
{
"id": 34538560,
"ns": 3,
"title": "User talk:59.188.42.121"
}
]
}
}

我希望能够从中访问 "id""title" 值,目前我有以下访问 "query":

let url = URL(string: "https://en.wikipedia.org/w/api.php?action=query&list=random&rnlimit=1&format=json")
URLSession.shared.dataTask(with: url!) { (data, response, err) in
guard let data = data else { return }
if err != nil {
print(err!)
} else {
do {
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary
if let result = json! as? [String: AnyObject] {
if let result = result["query"]! as? [String: AnyObject] {
print(result)
}
}
} catch {
print("Error")
}
}
}.resume()

现在,我并不引以为豪地进行类型转换,而且很快就会变得非常困惑。我也曾尝试通过执行以下操作进行类型转换,但无济于事:

[字符串:[字符串:[String:AnyObject]]]

是否有更好的方法来访问这些值?任何帮助将不胜感激!

最佳答案

如果您使用的是 Swift 4,则可以使用 Codable。使用 Codable 涉及为 JSON 定义自定义结构/类,但像 quicktype.io 这样的应用程序可以让这变得小菜一碟:您只需粘贴 JSON,它就会为您生成结构。

首先,保存来自维基百科的响应的结构:

struct Response: Codable {
struct Query: Codable {
let random: [Random]
}

struct Random: Codable {
let id, ns: Int
let title: String
}

struct Continue: Codable {
let rncontinue, continueContinue: String

enum CodingKeys: String, CodingKey {
case rncontinue
case continueContinue = "continue"
}
}

let batchcomplete: String
let `continue`: Continue
let query: Query

enum CodingKeys: String, CodingKey {
case batchcomplete, `continue`, query
}
}

并解码 JSON:

let url = URL(string: "https://en.wikipedia.org/w/api.php?action=query&list=random&rnlimit=1&format=json")
URLSession.shared.dataTask(with: url!) { (data, response, err) in
guard let data = data else { return }
guard err == nil else { print(err!); return }

do {
let response = try JSONDecoder().decode(Response.self, from: data)
if let firstArticle = response.query.random.first {
print(firstArticle)
} else {
print("No Article")
}
} catch {
print(error)
}
}.resume()

关于json - 使用 Swift 访问 JSON 中的嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53689031/

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