gpt4 book ai didi

arrays - 在 Swift 3 中使用嵌套数组解析 JSON

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

我找到了 this question on parsing JSON in Swift 3非常有帮助,但我注意到我的 JSON 结构有一个用于“天气”键的数组(见红色箭头)。我能够解析 JSON 输出的其他部分,但是这个数组导致了问题。 Snapshot of Console

问题:为什么我无法使用适用于此 JSON 数据其他部分的 [String:Any] 模式?

这是我在控制台中的错误:无法将类型“__NSSingleObjectArrayI”(0x112e04be0)的值转换为“NSDictionary”(0x112e05108)。

import UIKit

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

let url = URL(string: "http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=MYAPIKEY")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error)
}else {
if let urlContent = data {
do {
let parsedData = try JSONSerialization.jsonObject(with: urlContent, options: .allowFragments) as! [String:Any]
print(parsedData)
let currentCondions = parsedData["main"] as! [String:Any]

for (key, value) in currentCondions {
print("\(key) - \(value)")
}

let locationInfo = parsedData["sys"] as! [String:Any]
for (key, value) in locationInfo {
print("\(key) - \(value)")
}

let weatherMain = parsedData["weather"] as! [String:Any]
print(weatherMain)

} catch {
print("JSON processessing failed")
}//catch closing bracket
}// if let closing bracket
}//else closing bracket
}// task closing bracket
task.resume()
}
}

最佳答案

错误使问题变得相当清楚(即,并查看问题开头的输出。“weather”键的值不是字典。它是一个字典数组。

所以这样:

let weatherMain = parsedData["weather"] as! [String:Any]

需要:

let weatherMain = parsedData["weather"] as! [[String:Any]]

作为旁注,在您的应用中每次使用 ! 都是等待发生的崩溃。您应该安全地解包并安全地转换可能实际上不是您所想的值。我强烈建议您花一些时间仔细阅读 The Swift Programming Language 一书中关于可选、类型转换和可选链的部分。

关于arrays - 在 Swift 3 中使用嵌套数组解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854244/

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