2014-10-09 180 views
0

我有一个从服务器获取的json响应,应该将其解析为字典并将其转换为Swift中的NSObjects。我怎样才能做到这一点。将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 – 2014-10-09 09:25:17

回答

0

object是可选的。您需要某种展开可选链接或可选出价。

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

var responseHeader = object!["responseHeader"] 

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

等。

+0

是“Dictionary 没有名为subscript的成员”时显示错误。我忘了。谢谢。我尝试了下一个代码。 response.status = responseHeader [“status”]为Int。它也会引发错误。 response.status是Int类型。 – 2014-10-09 09:20:50

+0

'responseHeader'是'AnyObject'。它需要被转换为'NSDictionary'或'[String:AnyObject]'。 – Kirsteins 2014-10-09 09:31:01

0

你可以设置一个断点之前:

确保对象不

VAR responseHeader = [对象 “responseHeader”] //错误包含名为“responseHeader”的键。

否则,你应该让变量responseHeader成为一个可选值。

+0

我不能运行。它在特定行 – 2014-10-09 09:10:29

0

我写了一个解析JSON文本并将其映射到Swift结构体/类的类。

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