阅读和解析复杂的JSON - Swift

时间:2015-05-09 17:10:28

标签: ios json swift

我一直在尝试在Swift中读取这个复杂的JSON数据,我可以读取“feed”然后“entry”直到达到JSON中每个元素的“url”。

这是JSON(字典 - 数组 - 字典 - 数组 - 字典):

{
  "feed": {
    "entry": [
      {
        "media$group": {
          "media$content": [
            {
              "url": "http://..../photo.png"
            }
          ]
        }
      }
    ]
  }
}

这是我的Photo Class,我定义了从JSON获得的东西:

class Photo {

    let TAG_FEED:String = "feed"
    let TAG_ENTRY:String = "entry"
    let TAG_MEDIA_GROUP:String = "media$group"
    let TAG_MEDIA_CONTENT:String = "media$content"
    let TAG_IMG_URL:String = "url"
}

这是我的UIViewController,我正在尝试阅读JSON:

func parseJsonData(data: NSData) -> [Photo] {
        var photos = [Photo]()
        var error:NSError?

        let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary

        if error != nil {
            println(error?.localizedDescription)
        }

        // how is it possible to read it here 


        return photos
    }

读取数组后,可以存储字符串数组。

2 个答案:

答案 0 :(得分:2)

如果要解析,请使用下面的代码并学习。

if let myFeed = jsonResult[TAG_FEED] as? Dictionary<String, AnyObject> {
  if let myEntries = myFeed[TAG_ENTRY] as? Array<AnyObject> {
     for myEntry in myEntries {
         if let myMedia = myEntry[TAG_MEDIA_GROUP] as? Dictionary<String, AnyObject> {
            if let contents = myMedia[TAG_MEDIA_CONTENT] as? Array<AnyObject> {
               for myContent in contents {
                   if let url = myContent[TAG_IMG_URL] as? String {

                     // populate your model class here...

                  }
              }
           }
        }
    }
  }
}

将您的jsonResult行更改为let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableLeaves, error: &error) as! Dictionary<String, AnyObject>!

答案 1 :(得分:0)

作为替代方案,您可以使用SwiftyJSON