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

Deserialize JSON array to Swift objects using SwiftyJSON

鉴于此 JSON:

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

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

var jsonObjectArray = JSON(swiftStr).array!
var swiftArray = []
for jsonObject in jsonObjectArray {
   var swiftObject = SwiftObject()
   swiftObject.propetyName = jsonObject["propertyName"].string!
   swiftArry.append(swiftObject)
}
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]

}

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

结构:

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)
}

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

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

打印:

ID: 1, NAME: Bananas, RATING: 4
ID: 2, NAME: Tacos, RATING: 3
ID: 3, NAME: Apple, RATING: 5

请注意,我使用的是 SwiftyJSON、.intValue.stringValue 的非可选吸气剂,因为我假设这些字段将始终存在.如果你认为可能有 nils,你应该使结构属性可选并使用可选的 getters .int.string.