2014-10-09 166 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