如何在swift中解析“jSON”数据后在字典中附加值?

时间:2016-08-25 11:41:26

标签: ios json swift google-places-api

这是我的代码。

func connectionDidFinishLoading(connection: NSURLConnection){

    var err: NSError
    var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary

    if jsonResult.count>0 && jsonResult["results"]!.count>0 {
        var result: NSArray = jsonResult["results"] as! NSArray
        println("\(result)")
        var dict = NSDictionary()
        var myDict = NSDictionary()

        for dict in result {
            let googleGeo = dict["geometry"] as! NSDictionary
            let googleLoc = googleGeo["location"] as! NSDictionary
            let latitude = googleLoc["lat"] as! Float
            let longitude = googleLoc["lng"] as! Float
            let googleicon = dict.valueForKey("icon") as? NSString
            let googlename = dict["name"] as? NSString
            let googlevicinity = dict["vicinity"] as? NSString

            myDict.setValue(latitude, forKey: "lat"    
        }
    }
}

从Google Places API解析后,我收到了经度,纬度,名称,附近,图标。现在我想将这些值附加到myDctionary,以便我可以将值传递给数组并传递给下一个视图控制器。

有人让我知道要这样做吗?

1 个答案:

答案 0 :(得分:2)

我的朋友,你应该试试这个。

让字典确切地知道您希望它保持哪种类型的键/值对。你想使用" String"作为键,因为你的值有不同的数据类型你想要使用" AnyObject"作为价值。

UPDATE 对于Swift 2,您将使用String:AnyObject,但对于Swift3,您将使用String:Any。我已经更新了代码以显示Swift 3版本。

//this says your dictionary will accept key value pairs as String/Any
var myDict = [String:Any]()

您使用Any因为您有许多不同的数据类型

//Your values have are being cast as NSDictionary, Float, and NSStrings. All different datatypes
let googleGeo = dict["geometry"] as? NSDictionary
let googleLoc = googleGeo["location"] as? NSDictionary
let latitude = googleLoc["lat"] as? Float
let longitude = googleLoc["lng"] as? Float
let googleicon = dict.valueForKey("icon") as? NSString
let googlename = dict["name"] as? NSString
let googlevicinity = dict["vicinity"] as? NSString

现在使用方法.updateValue(value:Value,forKey:Hashable)来设置键和值

//update the dictionary with the new values with value-type Any and key-type String
myDict.updateValue(googleGeo, forKey: "geometry")
myDict.updateValue(googleLoc, forKey: "location")
myDict.updateValue(latitude, forKey: "lat")
myDict.updateValue(longitude, forKey: "lng")
myDict.updateValue(googleicon, forKey: "icon")
myDict.updateValue(googlename, forKey: "name")
myDict.updateValue(googlevicinity, forKey: "vicinity")

myDict现在应该拥有所有这些键/值对,并使用键提取值,然后使用它们执行所需的操作。顺便说一下,我只使用了那些关键名称,因为对于你的帖子来说,它似乎是你正在使用的惯例。您可以根据需要为键命名。但无论你如何命名,它们都必须与你用来提取价值的名称相同。

希望这有帮助!