xCode, Swift 3.0 JSON анализирует строковый ответ

#ios #json #xcode #swift3

#iOS #json #xcode #swift3

Вопрос:

Я пытаюсь получить код состояния и поместить его в оператор if. Этот код будет выполняться на игровой площадке Xcode.

Прямо сейчас статус возвращается как [«200»] с квадратными скобками вокруг него. Если я удалю скобки, он возвращает значение nil.

Как мне вернуть статус как 200 и поместить его в оператор if?

 import Foundation

let str = "{"names": ["Bob", "Tim", "Tina"],"status":["200"],"message":"User has been  created","id":null,"username":"asdf"}"//"{"names": ["Bob", "Tim", "Tina"]}"
let data = str.data(using: String.Encoding.utf8, allowLossyConversion: false)!

do {
    let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String: AnyObject]
    let status = json["status"] as? [String]

} catch let error as NSError {
     print("Failed to load: (error.localizedDescription)")
}
  

Ответ №1:

Вы забыли «:» после "status"

 let str = "{"names": ["Bob", "Tim", "Tina"],"status":["200"],"message":"User has been  created","id":null,"username":"asdf"}"//"{"names": ["Bob", "Tim", "Tina"]}"
  

РЕДАКТИРОВАТЬ: см. Комментарий OP ниже

Он возвращает [«статус»], и это совершенно нормально, потому что ваш json объект является Array of String ( [String] ) . Чтобы получить 200 , вам нужно получить первый объект этого массива :

 if let array = json["status"] as? [String]
{
   let code = array.first // Here, code should be 200
}
  

Комментарии:

1. Ах да, это была опечатка, когда я писал вопрос. В моем коде есть двоеточие, поэтому я все равно получаю ответ [«200»]