Swift - 如何遍历NSDictionary

时间:2014-07-15 17:44:00

标签: ios json swift nsdictionary

您好我正在学习Swift,我想从JSON Api中提取数据,My Swift代码看起来像这样。具体来说,我需要提取每个键及其值,(例如:打印标题值,封面等。)

//Json request
var error: NSError?
var raw = NSString.stringWithString("http://example.com/MovieAPI/api/v1/movies/")
var api_url = NSURL.URLWithString(raw)
let jsonData: NSData = NSData.dataWithContentsOfURL(api_url, options: nil, error: &error)
let result = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error)
as NSDictionary
for val in result {
   for (var i=0; i < val.value.count; i++){
       //println(val.value.valueAtIndex(3)) Not Working
   }
}

我的JSON结构是

{
  data: [
      {
        id: 2,
        title: "Hunger Games",
        cover: "http://example.com",
        genre: 2
       }
  ]
}

帮助!

2 个答案:

答案 0 :(得分:44)

以下是处理给定JSON的方法:

let dataArray = result["data"] as NSArray;

print("Data items count: \(dataArray.count)")

for item in dataArray { // loop through data items
    let obj = item as NSDictionary
    for (key, value) in obj {
        print("Property: \"\(key as String)\"")
    }
}

<强>说明:

请记住,您将解析的对象作为NSDictionary接收,当您遍历字典时,您接收属性的顺序可能与原始JSON中的顺序不同。

答案 1 :(得分:4)

检查这段代码以供参考:

// MARK: - Firebase
func retrieveData(){
    ref.observe(FIRDataEventType.value, with: { (snapshot) in
        let postDict = snapshot.value as! [String : AnyObject]
        let contactList = postDict["contacts"]!
        let user = FIRAuth.auth()!.currentUser

        let contactArray = contactList[user!.uid]! as! NSDictionary

        for (key,_) in contactArray {

            let contact:NSObject = contactArray[key] as! NSObject
            let firstName:String! = contact.value(forKey: "firstName") as? String
            let lastName:String! = contact.value(forKey: "lastName") as? String
            let company:String! = contact.value(forKey: "company") as? String
            let phone:String! = contact.value(forKey: "phone") as? String
            let email:String! = contact.value(forKey: "email") as? String

            print(contact.value(forKey: "firstName")!)
            contacts.append(Contact(firstName:firstName, lastName: lastName, company: company, phone: phone, email: email))
        }
        self.tableView.reloadData()

    })

}

当你将键值解析为NSObject来救援的可用对象时,它会变得特别棘手,这样你就可以获得key的值。

相关问题