2016-11-07 5 views
-3

У меня есть конечная точка API, который возвращает JSON в следующем формате:Разбор JSON в Swift 3

[ 
    { 
    "id": "1", 
    "name": "John" 
    }, 
    { 
    "id": "2", 
    "name": "Jane" 
    }, 
    { 
    "id": "3", 
    "name": "Nick" 
    } 
] 

Я пытаюсь разобрать это в Swift 3, но я могу только найти примеры синтаксического JSON отформатированы так:

{ 
"blogs": [ 
    { 
     "needspassword": true, 
     "id": 73, 
     "url": "http://remote.bloxus.com/", 
     "name": "Bloxus test" 
    }, 
    { 
     "needspassword": false, 
     "id": 74, 
     "url": "http://flickrtest1.userland.com/", 
     "name": "Manila Test" 
    } 
], 
"stat": "ok" 
} 

, который имеет дополнительный уровень выше, чем мой.

Итак, где примеры, которые я видел, просто анализируют их данные как jsonResponse["blogs"], я не могу этого сделать, поскольку мой формат отличается.

Как я могу разобрать формат, который у меня есть, или как я могу вернуть формат, который проще разобрать?

Любые предложения оценили, спасибо!

ответ

1

Это будет разобрать его при размещении в сети вызова.

 do { 
      let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions()) as! [[String : AnyObject]] 
      let firstPerson = json[0] 
      print(firstPerson) 
      let id = firstPerson["id"] as! String 
      print(id) 
      let name = firstPerson["name"] as! String 
      print(name) 
     } catch { 
      //handle error 
     } 

Кроме того, я, как правило, против консультирования библиотеки сторонней, но SwiftyJSON исключения я делаю. Если вы хотите попробовать, добавьте в файл стручка:

стручок SwiftyJSON», '3.0.0'

Документация: https://github.com/SwiftyJSON/SwiftyJSON

EDIT - Ответ Комментарий:

Замена линия:

if let id = firstPerson["id"] as? String { 
    print(id) 
} 

Замена линии (если вам нужно держаться значения):

var thisId: String? 
if let id = firstPerson["id"] as? String { 
    thisId = id 
} 
print(thisId ?? "") 
+0

Ну, я опаздываю, но мне было интересно что-то. В этой строке: 'let id = firstPerson [" id "] as! String'. Если значение 'firstPerson [" id "]' равно nil, не приведет ли он к сбою? – Rikh

+0

Да, строка замены будет чем-то, что я добавлю в редактирование – Sethmr

-3

я не знаю, быстр, но там может быть эквивалент АЯКСА кодирования JSon (на сторону сервера вы json_encode вашего массив и клиентской стороны вы json_decode ответа)

идеи иметь тот же форматировщик, кодирующие и декодирует данные

+1

Не отвечайте на конкретный вопрос, начиная свой ответ с «Я действительно не знаю _____». Потратьте время на переполнение стека, проверяя вопросы, которые относятся к вашему банку знаний. – Sethmr

2

Вы можете просто сделать следующее:

let data = // Data received from WS 
    do { 
     let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? [[String : String]] 
     //json is now an array from dictionary matching your model 
    } 
    catch { 
     //handle error 
    } 
Смежные вопросы