我一直在寻找将Swift中一个相当简单的JSON字符串转换为对象类型但无济于事的日子。
这是Web服务调用的代码:
func GetAllBusiness() { Alamofire.request(.GET, "http://MyWebService/").responseString { (request, response, string, error) in println(string) } }
我有一个快速的结构Business.swift:
struct Business { var Id : Int = 0 var Name = "" var Latitude = "" var Longitude = "" var Address = "" }
这是我部署的测试服务:
[ { "Id": 1, "Name": "A", "Latitude": "-35.243256", "Longitude": "149.110701", "Address": null }, { "Id": 2, "Name": "B", "Latitude": "-35.240592", "Longitude": "149.104843", "Address": null } ... ]
如果有人通过这个指导我会很高兴。
谢谢。
这里有一些技巧,以简单的例子开始。
考虑您具有以下JSON Array String(类似于您的):
var list:Array<Business> = [] // left only 2 fields for demo struct Business { var id : Int = 0 var name = "" } var jsonStringAsArray = "[\n" + "{\n" + "\"id\":72,\n" + "\"name\":\"Batata Cremosa\",\n" + "},\n" + "{\n" + "\"id\":183,\n" + "\"name\":\"Caldeirada de Peixes\",\n" + "},\n" + "{\n" + "\"id\":76,\n" + "\"name\":\"Batata com Cebola e Ervas\",\n" + "},\n" + "{\n" + "\"id\":56,\n" + "\"name\":\"Arroz de forma\",\n" + "}]" // convert String to NSData var data: NSData = jsonStringAsArray.dataUsingEncoding(NSUTF8StringEncoding)! var error: NSError? // convert NSData to 'AnyObject' let anyObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &error) println("Error: \(error)") // convert 'AnyObject' to Array<Business> list = self.parseJson(anyObj!) //=============== func parseJson(anyObj:AnyObject) -> Array<Business>{ var list:Array<Business> = [] if anyObj is Array<AnyObject> { var b:Business = Business() for json in anyObj as Array<AnyObject>{ b.name = (json["name"] as AnyObject? as? String) ?? "" // to get rid of null b.id = (json["id"] as AnyObject? as? Int) ?? 0 list.append(b) }// for } // if return list }//func
[编辑]
摆脱null更改为:
b.name = (json["name"] as AnyObject? as? String) ?? "" b.id = (json["id"] as AnyObject? as? Int) ?? 0
另请参阅**[Coalescing Operator](https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_124)** (aka的参考??)
**[Coalescing Operator](https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_124)**
??
希望它能帮助您解决问题,