Swift:如何将带有 Alamofilre 或 SwiftyJSON 的 JSON 字符串转换为 ObjectMapper?
Posted
技术标签:
【中文标题】Swift:如何将带有 Alamofilre 或 SwiftyJSON 的 JSON 字符串转换为 ObjectMapper?【英文标题】:Swift: How to Convert JSON String with Alamofilre or SwiftyJSON to ObjectMapper? 【发布时间】:2015-06-21 10:13:13 【问题描述】:我目前正在使用ObjectMapper for Swift 将 JSON 对象从 API 映射到模型对象
但我的 api 返回 API 看起来像这样:
success: true,
data:
[
"stats":
"numberOfYes":0,
"numberOfNo":2,
"progress":
"done":false,
"absolute":"2/100",
"percent":2
,
"quickStats":null,
"uid":5,
"name":"Flora",
"imageArray":[
"http://s3.com/impr_5329beac79400000",
"http://s3.com/impr_5329beac79400001"
],
"metaData":
"description":"Floral Midi Dress",
"price":"40$"
]
在数据节点中是数组,我无法使用此代码查找映射
let json = JSON(responseObject!)
for tests in json["impressions"][0]
let test = Mapper<myTests>().map(tests)
println(test?.impressionID)
我应该如何解决? 谢谢
** 已编辑 ** 我找到了类似@tristan_him 的解决方案
ObjectModel 映射结构
class Response: Mappable
var success: Bool?
var data: [Data]?
required init?(_ map: Map)
mapping(map)
func mapping(map: Map)
success <- map["success"]
data <- map["data"]
class Data: Mappable
var uid: Int?
var name: String?
// add other field which you want to map
required init?(_ map: Map)
mapping(map)
func mapping(map: Map)
uid <- map["uid"]
name <- map["name"]
使用 Alamofire 响应映射
let response: Response = Mapper<Response>().map(responseObject)!
for item in response.data!
let dataModel: Data = item
println(dataModel.name)
【问题讨论】:
【参考方案1】:您可以使用以下类结构映射上面的 JSON:
class Response: Mappable
var success: Bool?
var data: [Data]?
required init?(_ map: Map)
mapping(map)
func mapping(map: Map)
success <- map["success"]
data <- map["data"]
class Data: Mappable
var uid: Int?
var name: String?
// add other field which you want to map
required init?(_ map: Map)
mapping(map)
func mapping(map: Map)
uid <- map["uid"]
name <- map["name"]
那么你可以如下映射:
let response = Mapper<Response>().map(responseObject)
if let id = response?.data?[0].uid
println(id)
【讨论】:
@tristan_him,我们可以将 'Response' 和 'Data' 类放在两个不同的 Response.swift 和 Data.Swift 文件中,还是需要将它们保存在单个 .swift 文件中? @AshishPisey,它应该可以工作。这取决于您以及您希望如何构建项目。 当前版本和swift 3一样吗?抱歉,我对这个图书馆很陌生以上是关于Swift:如何将带有 Alamofilre 或 SwiftyJSON 的 JSON 字符串转换为 ObjectMapper?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 如何将 SwiftValidator 集成到我的项目中
Swift - 如何将本地存储的对象数组(文件管理器)转换为较新的对象? (带有附加属性)