2016-01-08 4 views
0

привет Я пытаюсь читать JSON как массив с сервера, а не словарь. Если я сделаю этоiOS SWIFT - объект JSON nil после NSJSONSerialization

let json: NSArray? 
do { 
    json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSArray 
    print("json is \(json)") 
} 

объект JSON приходит ноль через этот код, а также я не могу получить доступ к переменной, как этот json["code"] я попробовал это тоже

NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as! NSArray 

Но если я не указано какое-либо типа и пусть переменной AnyObject

do { 
    let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 
    print("json is \(json["code"]!)")      
} 

он работает но первая проблема здесь печатает Дополнительно в отладчике, но его хотя бы из моих забот по сравнению с тем, я не могу сделать что-то вроде этого

if json["code"] == 200 { 

} 

Если я делаю это он говорит

Бинарный оператор «==» не может применяться путем к операндам типа Anyobject? и Int

Я хочу получить данные в NSArray. Я не хочу, чтобы переменная json была установлена ​​как AnyObject. Inshort Я хочу, чтобы этот код работал

let json: NSArray? 
do { 
    json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSArray 
    print("json is \(json)") 
} 

если возможно. Я не знаю, что я делаю неправильно здесь

JSON:

{"code":200,"msg":"login success"} 
+2

Вы можете разместить образец JSON? – Joony

+0

if '' 'json''' является массивом, почему вы пытаетесь сделать' '' json ["code"] '' ' – Mateusz

+0

@Joony Я обновил свой вопрос – hellosheikh

ответ

2

При печати json["code"] работ, то json, несомненно, является словарь.

JSONObjectWithData возвращается AnyObject, что является "I-нет-нет-идея-что-то-это-но-это-это-какой-то-рода-оф-объект-и-не-а-значение" (благодаря gnasher729 для более точного пересказа AnyObject)

Поскольку вы знаете, объект [String:AnyObject] отливать тип

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [String:AnyObject] 

Тогда получите код - который является Int - с

if json["code"] as! Int == 200 { 

} 

или с дополнительным связыванием, если ключ не является обязательным

if let code = json["code"] as? Int { 
    if code == 200 { 

    } 
} 
+0

, но почему json - это словарь, когда я помещаю массив в функцию json_encode на моем сервере. как он меняет словарь? – hellosheikh

+1

Эквивалент ассоциативного массива в массиве PHP '(key => value)' является словарем. – vadian

+0

Большое спасибо. Эти ответы были именно то, что я искал .. – hellosheikh

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