使用 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 在 Swift 中解析这个 JSON 对象?
将 SwiftyJSON 用于 Swift 3.1 的子数组