2016-03-28 3 views
1

Загрузка опыта Java, но относительная n00b с Swift. У меня есть следующие JSON, из которого я не в состоянии извлечь «изображение» массив, который может иметь целых 3 изображение ...Извлечение массива из JSON с использованием Swift

{ 
     "status" : "OPEN", 
     "description" : “…”, 
     "name" : “…”, 
     "owner" : 1, 
     "images" : [ 
     { 
      "id" : 1, 
      "path" : "\/uploads\/1-60003456.jpeg" 
     } 
     ], 
     "created" : 1459135829000, 
     "id" : 1 
    } 

Я постоянно работаю на множество времени компиляции и выполнение ошибки. Например, этот код из SwiftyJSON Документов

for (key,subJson):(String, JSON) in json { 
    if(key == "images"){ 
     let myImages = subJson.array 
     print(myImages![0]["path"]) 
    } 
} 

Правильно выводит значение «путь», но пытается сохранить это значение в моих [String] изображениях:

images.append(myImages![0]["path"] as String) 

дает ошибку " Нельзя индексировать значение типа JSON с индексом типа String «

XCode сообщает мне, что subJson является NSDictionary для« изображений »(или это массив словарей?), Но когда я пытаюсь использовать его как таковой , Я получаю «Невозможно преобразовать значение типа JSON для ввода NSDictionary в режиме слияния».

Я уверен, что это простая синтаксическая ошибка, но на данный момент я просто перехожу назад и вперед между различными ошибками. Спасибо за любые рекомендации.

ответ

0

Не используйте downcasting, SwiftyJSON уже выполнил эту работу. SwiftyJSON имеет дополнительный поглотитель для строкового представления объекта уже разобраны:

myImages![0]["path"].string 

Так как это Дополнительно вы хотите безопасно разворачивать его:

if let path = myImages![0]["path"].string { 
    images.append(path) 
} 

Если myImages![0]["path"] не является строкой, то SwiftyJSON предлагает вам как можно больше дополнительных добытчиками, как есть типы JSON:

myImages![0]["path"].array 
myImages![0]["path"].dictionary 
myImages![0]["path"].int 

т.д.

С SwiftyJSON вы можете также индекс непосредственно:

if let firstImagePath = json["images"][0]["path"].string { 
    // use "firstImagePath" 
} 

В заключение, еще один вид цикла:

if let images = json["images"] { 
    for image in images { 
     if let path = image["path"].string { 
      // use "path" 
     } 
    } 
} 
+0

работал отлично. Спасибо, Эрик. – MolonLabe

+0

Добро пожаловать. – Moritz

Смежные вопросы