2014-10-09 2 views
0

У меня есть ответ json, который извлекается с сервера, и он должен анализироваться как словарь и преобразовывать его в NSObjects в Swift. Как я могу это сделать.Преобразование JSON в объекты в Swift

func convertJSONToObjects(object:Dictionary<String,AnyObject>?) -> CommonResponse{ 
     var response:CommonResponse; 
     if(object != nil){ 
      response = CommonResponse() 
      var responseObject = object //It is dictionary 

      var responseHeader = object["responseHeader"] //error 

      response.status = responseHeader["status"] as Int //error 
      //response.status is Int 
     } 
     return response 
    } 


var parsedJson = NSJSONSerialization.JSONObjectWithData(object as NSData, options: NSJSONReadingOptions.MutableContainers, error: &parseError) as NSDictionary 

вызова функции

convertJSONToObjects(parsedJson) 
+0

Я могу рекомендовать https://github.com/SwiftyJSON/SwiftyJSON –

ответ

0

object не является обязательной. Вам нужно какое-то дополнительное развертывание или дополнительное задание.

if let object = object { 
    var responseHeader = object["responseHeader"] 
} 

или

var responseHeader = object!["responseHeader"] 

или

if let responseHeader = object?["responseHeader"] { 
    // ... 
} 

и так далее.

+0

«да». Я забыл об этом. Благодарю. Я попробовал следующий код. response.status = responseHeader ["status"] как Int. Это также вызывает ошибку. response.status - тип Int. –

+0

'responseHeader' -' AnyObject'. Его нужно отправить в 'NSDictionary' или' [String: AnyObject] '. – Kirsteins

0

Вы можете установить точку останова перед:

вар responseHeader = объект [ "responseHeader"] // ошибка

, чтобы убедиться, что объект делает содержит ключ с именем «responseHeader».

В противном случае вы должны позволить переменной responseHeader быть необязательным значением.

+0

я не могу работать. он показывает ошибку, так как «Словарь не имеет члена с индексом« по конкретной строке –

0

Я написал класс, который анализирует текст JSON и сопоставляет его с Swift structs/classes.

let p = CutePossumParser(json: json) 

let model = Possum(
    name: p.parse("name", miss: ""), 
    home: Address(
    planet: p["home"].parse("planet", miss: "") 
) 
) 

if !p.success { /* mapping failed */ } 

https://github.com/exchangegroup/cute-possum-parser

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