如何访问此词典中的信息? - 斯威夫特

时间:2015-04-28 01:59:31

标签: ios swift

我是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中唯一的方法。

接下来,我的placestuple。当我访问places时,我会在括号( info ...)中获取信息。如何访问第一个元组中的state?我尝试了json["places"].0["state"],但这不正确。

1 个答案:

答案 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不同,您必须自己执行此操作