我正在尝试将JSON Url解析为UICollectionView,但我一直无法将'__NSArrayI'(0x1010ebd88)类型的值转换为'NSDictionary'(0x1010ec288) . 我尝试加载数据时出错 . 我正在使用xcode 8和Swift 3.0 . 任何人都可以看到我得到的错误以及如何解决它?不知道从哪里开始 .
let link = "http://www.flickr.com/services/feeds/photos_public.gne?tags=swimming&format=json&nojsoncallback=1"
let urlString = link
let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print(error)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
let currentConditions = parsedData["items"] as! [String:Any]
print(currentConditions)
let currentItem = currentConditions["link"] as! [String:Any]
print(currentItem)
} catch let error as NSError {
print(error)
}
}
}.resume()
编辑:好的所以我已经走了这么远,现在在“items”中,还有另一个字符串,我需要提取到一个数组 . 在项目中,有几个“link =”我需要一个数组中的链接,但不知道如何把它拿出来 . 当我打印键值时,项目会显示,但它似乎只是一个长字符串,而不是数组或字典 . 任何建议?谢谢,
let urlString = link
var itemArray: Any?
var parsedData: [String:Any] = ["":""]
let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print(error)
} else {
do {
parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
itemArray = parsedData["items"] as! [[String:Any]]
for (key, value) in parsedData {
print("\(key) - \(value) ")
}
} catch let error as NSError {
print(error)
}
}
}.resume()
guard let images_array = parsedData["items"] as? NSArray else
{
print("error2")
return
}
2 回答
正如评论中提到的
parsedData["items"]
是一个数组,键link
的值是一个字符串,所以你需要使用一个循环:您可以使用:由于项目中的数据是字典数组而链接不在内部数组中,因此它是主字典,因此您可以通过将链接作为键传递来轻松获得此字典 .