我一直在尝试在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
}
读取数组后,可以存储字符串数组。
答案 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