使用 Decodeable swift 4.0 解析数据不读取数据 - Xcode

Posted

技术标签:

【中文标题】使用 Decodeable swift 4.0 解析数据不读取数据 - Xcode【英文标题】:Parsing data with Decodeable swift 4.0 not reading data - Xcode 【发布时间】:2018-03-11 08:35:38 【问题描述】:

我正在尝试使用 JSONDecoder 解析数据,但是我不断收到错误消息。我不确定为什么?如果有人可以查看代码并解释出了什么问题,将不胜感激!

struct Stops1 : Decodable
let StopName : String
let StopLat : String
let StopLon: String



 let path = Bundle.main.path(forResource: "newStops", ofType: "json")
 let url = URL(fileURLWithPath: path!)

    do 
        let data = try Data(contentsOf: url)
        let Stops = try JSONDecoder().decode([Stops1].self, from: data)
        print(Stops)

    
    catch let jsonErr 
        print("Error occured during Parsing", jsonErr)
    

下面是名为“newStops”的本地json文件:

  
  "Stops1" : 

    
        "StopName": "loc 1",
        "StopLat": "-46.450364",
        "StopLon": "169.659519"
    ,
    
        "StopName": "loc 2",
        "StopLat": "-45.898395",
        "StopLon": "170.486386"
    ,
    
        "StopName": "loc 3",
        "StopLat": "-36.635997",
        "StopLon": "174.747697"
    ,
  

【问题讨论】:

【参考方案1】:

JSON 无效。

我猜Stops1键的值应该是一个数组,那么JSON一定是


 "Stops1" : [ ...,  ...,  ... ] 

关于 JSON 和相关结构的一些一般想法

根据命名约定,建议将键命名为小写 结构名称应为单数形式 (Stop) 在属性中也包含结构的名称与 Swift 的命名理念背道而驰。

我推荐这种简单的 JSON 格式


    "stops" : [
        "name": "loc 1", "lat": "-46.450364", "lon": "169.659519",
        "name": "loc 2", "lat": "-45.898395", "lon": "170.486386",
        "name": "loc 3", "lat": "-36.635997", "lon": "174.747697"
    ]

以及相关的结构

struct Stop : Decodable 
    let name : String
    let lat : String
    let lon: String

根对象是一个带有键stops的字典,这需要一个额外的伞形结构:

struct Root : Decodable 
    let stops : [Stop]

现在解码 JSON

let url = Bundle.main.url(forResource: "newStops", withExtension: "json")!

do 
    let data = try Data(contentsOf: url)
    let root = try JSONDecoder().decode(Root.self, from: data)
    for stop in root.stops 
       print(stop.name)
    

catch 
    print("Error occured during Parsing", error)

【讨论】:

我怎样才能用这个方法调用所有的“名称”值? 非常感谢您的帮助! :)

以上是关于使用 Decodeable swift 4.0 解析数据不读取数据 - Xcode的主要内容,如果未能解决你的问题,请参考以下文章

如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?

使用 4.0 版的 Swift 3.0 项目中的 Tesseract 训练数据不工作

在 swift 4.0 中使用 Alamofire/SwiftyJSON 时出错

将 swift 更新到 4.0 版后 Carthage Build 失败

未加载库/未找到图像 - Swift 4.0

使用 Swift 4.0 编译的模块无法在 Swift 3.1 中导入框架二进制文件