使用SwiftyJSON将JSON数组反序列化为Swift对象

时间:2016-03-22 03:37:22

标签: ios json swift swifty-json

鉴于此JSON:

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

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

3 个答案:

答案 0 :(得分:7)

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

结构:

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

用于存储struct实例的数组:

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,NAME:Bananas,RATING:4
  ID:2,NAME:Tacos,评分:3
  ID:3,NAME:Apple,RATING:5

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

答案 1 :(得分:2)

var jsonObjectArray = JSON(swiftStr).array!
var swiftArray = []
for jsonObject in jsonObjectArray {
   var swiftObject = SwiftObject()
   swiftObject.propetyName = jsonObject["propertyName"].string!
   swiftArry.append(swiftObject)
}

答案 2 :(得分:1)

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]

}