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

Posted

技术标签:

【中文标题】使用 SwiftyJSON 将 JSON 数组反序列化为 Swift 对象【英文标题】:Deserialize JSON array to Swift objects using SwiftyJSON 【发布时间】: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 对象数组?

【问题讨论】:

【参考方案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]


【讨论】:

以上是关于使用 SwiftyJSON 将 JSON 数组反序列化为 Swift 对象的主要内容,如果未能解决你的问题,请参考以下文章

SwiftyJSON 添加 JSON 对象数组

使用 SwiftyJSON 将元组数组转换为 JSON 字符串

如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?

将 SwiftyJSON 用于 Swift 3.1 的子数组

使用 Alamofire + SwiftyJSON 获取 JSON 数组

需要帮助使用 SwiftyJSON 使用 JSON 数据填充数组