我是Swift的新手。我正在尝试进行简单的REST
调用并访问返回的数据。我正在使用Zippopotam
API进行测试,该API会根据邮政编码返回城市信息。我从REST
调用中得到结果并将其放入字典中:
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data,
options:NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
以下是我打印json时打印出来的一些数据:
{
country = "United States";
"country abbreviation" = US;
places = (
{
latitude = "40.5541";
longitude = "-111.9539";
"place name" = "South Jordan";
state = Utah;
"state abbreviation" = UT;
}
);
"post code" = 84095;
}
首先,是否有更好的方法来访问键值对而不是
json["post code"].text!
获取信息的级别似乎很低,但也许这是Swift
中唯一的方法。
接下来,我的places
是tuple
。当我访问places
时,我会在括号( info ...)
中获取信息。如何访问第一个元组中的state
?我尝试了json["places"].0["state"]
,但这不正确。
答案 0 :(得分:1)
JSON只有三种基本类型 - 数组,字典和字符串。它们由NSJSONSerialization
映射到NSDictionary
(桥接到Swift字典),NSArray
(桥接到Swift数组)和NSString
(桥接到String)。
访问NSJSONSerialization
返回的数据的最简单方法是阅读字典&数组就像你一样。
在'places'的情况下,它是一个字典数组,所以你可以说'状态'
if let places=json["places"] as? [[String:AnyObject]] {
if (places.count > 0) {
let place=places[0]
let state=place["state"] as! String
}
}
“更好”的方法是获取JSON并使用它创建具有适当属性的对象。不幸的是,与可以使用已定义的模式自动生成此“解析”代码的XML不同,您必须自己执行此操作