我试图从 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 Foundationstruct 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() }解决方法@H_404_35@ 请仔细阅读错误消息.错误很明显
Parsed JsON number <-77.20999999999999> does not fit in Int
Int表示没有小数位的整数值.只有两种数字JsON类型,Int和Double.
坐标总是双倍的
struct Coord: Decodable { let lon: Double let lat: Double}
注意不要将lat和long声明为可选,如果存在坐标,则它始终包含两个值.
总结以上是内存溢出为你收集整理的在Swift 4中使用Decodable解析JSON全部内容,希望文章能够帮你解决在Swift 4中使用Decodable解析JSON所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)