【发布时间】:2020-05-13 17:52:41
【问题描述】:
我正在尝试在 Swift 中解析一些我之前在 Objective-C 中解析过的 JSON,但遇到了一些困难。
在 Objective-C 中,我能够使用以下方法简单地解析它:
NSError* error;
NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSNumber *temp = jsonResults[@"main"][@"temp"];
NSNumber *humidity = jsonResults[@"main"][@"humidity"];
在 Swift 中,到目前为止,当我尝试序列化为字典时,或者当我尝试访问 JSON 中的值时序列化为字符串时,我的代码会出错。
在 Swift 中执行此操作的正确方法是什么。这是我尝试序列化为 Dictionary 的版本,它给出了一个错误
//assemble url query items
components.queryItems = queryItems
let url = components.url
let task = URLSession.shared.dataTask(with: url!) { //open 2
[weak self] data, response, error in
print("heard back from task")
guard let data = data, error == nil else { return }
do {
let jsonResults = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [Dictionary:Any]
//Gives error Dictionary' requires that 'Value' conform to 'Hashable'
let main = jsonResults["main"] as Any
let temp = main[3]
completion("got here")
} catch let error as NSError {
print(error)
}
这是 JSON 的示例:
{"coord":{"lon":10.73,"lat":59.91},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"base":"stations","main":{"temp":49.62,"feels_like":43.45,"temp_min":48,"temp_max":52,"pressure":987,"humidity":30},"wind":{"speed":1.99,"deg":95,"gust":7},"clouds":{"all":95},"dt":1589387530,"sys":{"type":3,"id":2009047,"country":"NO","sunrise":1589337830,"sunset":1589398989},"timezone":7200,"id":3143242,"name":"Oslo County","cod":200}
【问题讨论】:
-
看看这个,它可能对你有帮助stackoverflow.com/questions/46271889/…
标签: ios json swift json-serialization