2016-07-02 2 views
3

Когда я построить и запустить следующее:SwiftyJSON производит пустую строку значений

// Grabbing the Overlay Networks 

let urlString = "https://test.sdnnw.net/networks/overlay_networks" 
if let url = NSURL(string: urlString) { 
    let URLRequest = NSMutableURLRequest(URL: url) 
    URLRequest.setValue("token", forHTTPHeaderField: "User-Token") 
    URLRequest.setValue("username", forHTTPHeaderField: "User-Auth") 
    URLRequest.HTTPMethod = "GET" 
    Alamofire.request(URLRequest).responseJSON { (response) -> Void in 
    if let value = response.result.value { 
     let json = JSON(value) 
     print(json) 
    } 
    } 
} 

Я получаю следующие результаты (что правильно):

[ 
    { 
    "uuid" : "c8bc05c5-f047-40f8-8cf5-1a5a22b55656", 
    "description" : "Auto_API_Overlay", 
    "name" : "Auto_API_Overlay", 
    } 
] 

Когда я построить и запустить следующее:

// Grabbing the Overlay Networks 

let urlString = "https://test.sdnnw.net/networks/overlay_networks" 
if let url = NSURL(string: urlString) { 
    let URLRequest = NSMutableURLRequest(URL: url) 
    URLRequest.setValue("token", forHTTPHeaderField: "User-Token") 
    URLRequest.setValue("username", forHTTPHeaderField: "User-Auth") 
    URLRequest.HTTPMethod = "GET" 
    Alamofire.request(URLRequest).responseJSON { (response) -> Void in  
    if let value = response.result.value { 
     let json = JSON(value) 
     print(json["name"].stringValue) 
     print(json["description"].stringValue) 
     print(json["uuid"].stringValue) 
    } 
    } 
} 

я получаю пустой выход - не null, nil или [:], просто пустой. Scoured SwiftyJSON и здесь и не нашли что-нибудь близкое к расчистке, почему stringValue работает неправильно (возможно, я ищу неправильные ключевые слова?). Был бы очень признателен за некоторые отзывы о том, что я делаю неправильно.

+0

stringValue является необязательным. Попробуйте использовать строку и проверить. – Dershowitz123

+0

'SwiftyJSON' на самом деле не так * swifty *. Когда вы пытаетесь проанализировать значение, которого нет, вы не получаете необязательный, вы получаете пустое значение. Правда, это предотвратит сбой приложения, но это немного затруднит найти ошибку. – Sulthan

+0

Спасибо за советы Dershowitz123 и Sulthan! С наилучшими пожеланиями! – techiejs

ответ

2

В JSON символы [] предназначены для массивов, а {} предназначены для словарей.

Ваш результат JSON:

[{ "UUID": "c8bc05c5-f047-40f8-8cf5-1a5a22b55656", "описание": "Auto_API_Overlay", "имя": "Auto_API_Overlay"}]

- это массив, содержащий словарь.

Получите содержимое с помощью цикла, например.

Используя SwiftyJSON, цикл с кортежем (первый Arg объекта SwiftyJSON является индексом, второй аргумент является содержание):

for (_, dict) in json { 
    print(dict["name"].stringValue) 
    print(dict["description"].stringValue) 
    print(dict["uuid"].stringValue) 
} 

быть осторожным с SwiftyJSON properties заканчивая Value, поскольку они являются не- необязательно геттеры (если значение равно нулю, оно будет сбой). В факультативные добытчики не Value:

for (_, dict) in json { 
    if let name = dict["name"].string, 
     desc = dict["description"].string, 
     uuid = dict["uuid"].string { 
      print(name) 
      print(desc) 
      print(uuid) 
    } 
} 
+0

Спасибо, что нашли время ответить и объяснить Эрик Д! Это сработало. С наилучшими пожеланиями! – techiejs

+0

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