没有数组的Swift Json数据解析
Posted
技术标签:
【中文标题】没有数组的Swift Json数据解析【英文标题】:Swift Json data parsing without array 【发布时间】:2016-08-08 12:59:52 【问题描述】:我有工作 json 数据解析 array
代码,但我想将其更改为 Dictionary
解析。我的新 json 文件
"Id": 450,
"Name": "NameforItem",
"Image": "234234.jpg"
我的旧 json 文件工作成功
[
"Id": 450,
"Name": "NameforItem",
"Image": "234234.jpg"
]
我的解析代码。
/// Convert JSON data into array
private func getFromJSON(jsonData: NSData) throws -> [Place]
var places = [Place]()
do
if let jsonArray = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [[String: AnyObject]]
for i in jsonArray
var properties = [String: AnyObject]()
properties[placeJSONKeys.Id] = i[placeJSONKeys.Id]
properties[placeJSONKeys.Name] = i[placeJSONKeys.Name]
let place = Place(properties: properties)
places.append(place)
catch
throw TMDBErrors.ParsingError
return places
谢谢!
【问题讨论】:
【参考方案1】:我建议您将函数的返回类型更改为Optional
:
private func getFromJSON(jsonData: NSData) throws -> Place?
var place: Place?
do
if let json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [String: AnyObject]
var properties = [String: AnyObject]()
properties[placeJSONKeys.Id] = json[placeJSONKeys.Id]
properties[placeJSONKeys.Name] = json[placeJSONKeys.Name]
place = Place(properties: properties)
catch
throw TMDBErrors.ParsingError
return place
更新
private func getFromJSON(jsonData: NSData) throws -> Place?
var place: Place?
do
if let json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [String: AnyObject]
place = Place(properties: json)
catch
throw TMDBErrors.ParsingError
return place
【讨论】:
@Shadow Of Worked Ty 我会尽快批准的 @SwiftDeveloper - 一个问题,也检查一个更新的答案 @Anbu.Karthik 谢谢 @SwiftDeveloper -placeJSONKeys
的原因是结构类,你可以在任何地方直接访问对象
@Anbu.Karthik 是的,我明白了,谢谢!【参考方案2】:
将[[String: AnyObject]]
更改为[String: AnyObject]
,因为现在它是字典而不是数组
do
if let jsonDic = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments) as? [String: AnyObject]
print(jsonDic["Id"])
print(jsonDic["Name"])
print(jsonDic["Image"])
catch
throw TMDBErrors.ParsingError
【讨论】:
为什么要增加内存,你可以直接访问JSonarray字典,这里不需要循环以上是关于没有数组的Swift Json数据解析的主要内容,如果未能解决你的问题,请参考以下文章