2015-01-18 3 views
0

Задача: Попытка использовать полезную нагрузку JSON, содержащую динамическое имя объекта. Поскольку имена этих объектов не являются последовательными или производными от шаблона, я не могу обходить полезную нагрузку с помощью SwiftyJSON. Образец динамических объектов выглядит следующим образом обозначены жирным шрифтом:SwiftyJSON и динамические именованные объекты

«180А»: { «идентификатор»: «180A», «Этикетка»: «Оушнсайд ворота», «путь»: «Север », "индекс": "1" }, "195C": { "идентификатор": "195C", "этикетка": "Дюна-Бич Ворота", "путь": "Север", "индекс": "2" }, "211F": { "id": "211F", "Этикетка": "Sunset Harbor Gate", "путь": "Север", "Индекс": "3" }

Пример JSON Payload:

{ 
"Direction": { 
    "NorthGates": { 
     "180A": { 
      "id": "180A", 
      "label": "Oceanside Gate", 
      "path": "North", 
      "index": "1" 
     }, 
     "195C": { 
      "id": "195C", 
      "label": "Dune Beach Gate", 
      "path": "North", 
      "index": "2" 
     }, 
     "211F": { 
      "id": "211F", 
      "label": "Sunset Harbor Gate", 
      "path": "North", 
      "index": "3" 
     } 
     } 
    } 
} 

Использование SwiftyJSON Я в состоянии успешно напечатать этикетку известного объекта, например, «180А»:

DataManager.getTopAppsDataFromFileWithSuccess { (data) -> Void in 

    let json = JSON(data: data) 

    if let gateLabel = json["Direction"]["NorthGates"]["180A"]["label"].stringValue { 

     //output: "Oceanside Gate" 
     println("NSURLSession: \(gateLabel)") 
    } 
} 

поскольку динамические имена объектов не являются статичными, я не могу использовать предопределенные имена объектов в коде выше найдите значение метки. Последующие попытки вернуть нулевые значения:

//stringValue = nil 
if let gateLabel = json["Direction"]["NorthGates"][0].stringValue { 
     println("NSURLSession: \(gateLabel)") 
    } 

//stringValue = nil 
if let gateLabel = json["Direction"]["NorthGates"][0]["label"].stringValue { 
     println("NSURLSession: \(gateLabel)") 
    } 

ответ

1

Это решение:

if let gates:[String: JSON] = json["Direction"]["NorthGates"].dictionaryValue { 

     for item in gates { 
      println("Dynamic Object Gate Name: \(item.0)") //Gate Name 
      println(item.1["label"].stringValue)    //Gate Label 
      println(item.1["path"].stringValue)    //Gate Path 
      println(item.1["index"].stringValue)    //Gate Index 
     } 
    } 
Смежные вопросы