【问题标题】:Deserialize JSON array to Swift objects using SwiftyJSON使用 SwiftyJSON 将 JSON 数组反序列化为 Swift 对象
【发布时间】:2016-03-22 03:37:21
【问题描述】:

鉴于此 JSON:

  {
    "id" : 1,
    "name" : "Bananas",
    "rating" : 4
  },
  {
    "id" : 2,
    "name" : "Tacos",
    "rating" : 3
  },
  {
    "id" : 3,
    "name" : "Apple",
    "rating" : 5
  }

如何使用 SwiftyJSON 创建一个 Swift 对象数组?

【问题讨论】:

    标签: ios json swift swifty-json


    【解决方案1】:

    我会从每个字典中创建一个结构并将这些结构存储在一个数组中。

    结构:

    struct MyObject {
        let id: Int
        let name: String
        let rating: Int
    }
    

    存储结构实例的数组:

    var objects: [MyObject] = []
    

    让 SwiftyJSON 解析你的 JSON 数据:

    let jsonArray = JSON(data: myData)
    

    创建结构并将它们附加到新数组中:

    for (index, dict) in jsonArray {
        let thisObject = MyObject(id: dict["id"].intValue, name: dict["name"].stringValue, rating: dict["rating"].intValue)
        objects.append(thisObject)
    }
    

    现在您有了一个反映 JSON 内容的 Swift 结构(当然也可以是类)数组:

    for object in objects {
        print("ID: \(object.id), NAME: \(object.name), RATING: \(object.rating)")
    }
    

    打印:

    ID:1,名称:香蕉,评分:4
    ID:2,名称:Tacos,评分:3
    ID:3,名称:Apple,评分:5

    请注意,我正在使用 SwiftyJSON 的非可选 getter,.intValue.stringValue,因为我假设这些字段将始终存在。如果您认为可能存在 nil,则应将结构属性设为可选,并使用可选的 getter .int.string

    【讨论】:

      【解决方案2】:
      var jsonObjectArray = JSON(swiftStr).array!
      var swiftArray = []
      for jsonObject in jsonObjectArray {
         var swiftObject = SwiftObject()
         swiftObject.propetyName = jsonObject["propertyName"].string!
         swiftArry.append(swiftObject)
      }
      

      【讨论】:

        【解决方案3】:
        let jsonString = "[{\"id\" : 1,\"name\" : \"Bananas\",\"rating\" : 4},{\"id\" : 2,\"name\" : \"Tacos\",\"rating\" : 3},{\"id\" : 3,\"name\" : \"Apple\",\"rating\" : 5}]"
        if let dataFromString = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
            let json = JSON(data: dataFromString)
        
            let element1 = json[0]
            let element2 = json[1]
            let element3 = json[2]
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多