几天来,我一直在搜索如何在Swift中将一个相当简单的JSON字符串转换为一个对象类型,但没有结果.

以下是Web服务调用的代码:

func GetAllBusiness() {

        Alamofire.request(.GET, "http://MyWebService/").responseString { (request, response, string, error) in

                println(string)

        }
}

我的生意很好.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
  }
  ...
]

如果有人能 bootstrap 我完成这件事,那就太好了.

谢谢.

推荐答案

以下是如何从简单示例开始的一些提示.

假设您有如下JSON Array字符串(与您的类似):

 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    

[EDIT]

要消除NULL,请将其更改为:

b.name = (json["name"] as AnyObject? as? String) ?? ""
b.id  =  (json["id"]  as AnyObject? as? Int) ?? 0 

另见100的参考资料(又名??)

希望它能帮你理清头绪,

Ios相关问答推荐

如何保持拖动预览与原始项目完全相同?

如何仅在TextField中的文本发生更改时才执行代码?

快速相机放大手势不能正常工作

Strange UIView.animate更改UIButton标题 colored颜色 的行为

React Native IOS base64 编码图像不显示

为什么常量属性可能在 Swift 类中被初始化两次?

iOS按钮和navigationLink在List中相邻

iOS SwiftUI - 从以前的 struct 调用函数

转换在 NavigationView 中不起作用

如何根据设备时间设置 Flutter 应用时间线?

iOS:应用程序在安装应用程序时未征求用户许可.每次都获得 kCLAuthorizationStatusNotDetermined - Objective-c & Swift

如何在 UIActivityViewController 中设置邮件主题?

Xcode 故事板:内部错误.请提交错误

interfaceOrientation在 iOS 8 中已弃用,如何更改此方法 Objective C

如何判断是否为 64 位构建了静态库?

所有小部件的Flutter 填充?

水平滚动 UICollectionView 时对齐单元格的中心

使用 Chrome DevTools 调试 iOS 6+7 Mobile Safari

UITextView 内容插图

Swift:如何在设备旋转后刷新 UICollectionView 布局