Я пытаюсь разобрать JSON Url в UICollectionView, но я продолжаю получать Не могу отличить значение типа '__NSArrayI' (0x1010ebd88) к 'NSDictionary' (0x1010ec288). как ошибка при попытке загрузить данные. Я использую xcode 8 с Swift 3.0. Кто-нибудь может увидеть ошибку, которую я получаю, и как ее исправить? Не уверен, куда идти отсюда.Разбор JSON в Swfit 3.0 Бросок NSArray в NSDictionary Ошибка
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()
Edit: OK Так что я пошел так далеко, и теперь в «пунктов», есть еще одна строка, что мне нужно извлечь в массив. Внутри элементов есть несколько «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
}
В вашем JSON, 'parsedData [ "пункты"]' является массивом, а не словарь, так что вы должны быть приведения его в '[[String: Любой]]'. 'currentConditions [" link "]' также не словарь, это 'String'. – dan
OK Это помогло распечатать текущие условия. теперь это не позволяет мне вытащить «ссылку» из currentConditions, даже когда я установил ее в строку. код, который я обновил, чтобы currentItem = currentConditions ["link"] как! String В настоящее время отправление ошибки не может индексировать значение типа [[String: Any]] с индексом типа «String» –