使用 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 时出错