在Swift 4中使用Decodable解析JSON
发布时间:2020-12-14 04:38:53 所属栏目:百科 来源:网络整理
导读:有人可以帮我解决问题,Int的长度 我试图从 JSON获取值.执行后,我总是得到的错误是: Error serializing json: dataCorrupted(Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "coord",intValue: nil),CodingKeys(stringValue: "lon",intV
有人可以帮我解决问题,Int的长度
我试图从 JSON获取值.执行后,我总是得到的错误是: Error serializing json: dataCorrupted(Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "coord",intValue: nil),CodingKeys(stringValue: "lon",intValue: nil)],debugDescription: "Parsed JSON number <-77.20999999999999> does not fit in Int.",underlyingError: nil)) 我的JSON:我想获得第一个节点,即“coord” { "coord": { "lon": -77.21,"lat": 38.84 },"weather": [ { "id": 741,"main": "Fog","description": "fog","icon": "50n" },{ "id": 701,"main": "Mist","description": "mist","icon": "50n" } ],"base": "stations","main": { "temp": 287.75,"pressure": 1014,"humidity": 77,"temp_min": 284.15,"temp_max": 292.15 },"visibility": 16093,"wind": { "speed": 1.53,"deg": 282.001 },"clouds": { "all": 1 },"dt": 1526025120,"sys": { "type": 1,"id": 3131,"message": 0.0048,"country": "US","sunrise": 1526032792,"sunset": 1526083866 },"id": 420039291,"name": "Arlington","cod": 200 } Struct类:此类将定义对象的结构 import Foundation struct TestingClass: Decodable{ let coord: Coord } struct Coord: Decodable{ let lon: Int? let lat: Int? } ViewController:这个类将有一个从Internet获取JSON的函数 override func viewDidLoad() { super.viewDidLoad() initialization() } func initialization(){ let jsonUrlString="http://api.openweathermap.org/data/2.5/weather?zip=22003,us&appid=c632597b1892b4d415c64ca0e9fca1f1" guard let url = URL(string: jsonUrlString) else { return } URLSession.shared.dataTask(with: url) { (data,response,err) in guard let data = data else { return } do { let courses = try JSONDecoder().decode(TestingClass.self,from: data) print(courses.coord.lat) } catch let jsonErr { print("Error serializing json:",jsonErr) } }.resume() } 解决方法
请仔细阅读错误消息.错误很明显
Int表示没有小数位的整数值.只有两种数字JSON类型,Int和Double. 坐标总是双倍的 struct Coord: Decodable { let lon: Double let lat: Double } 注意不要将lat和long声明为可选,如果存在坐标,则它始终包含两个值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |