ObjectMapper - 嵌套动态键
Posted
技术标签:
【中文标题】ObjectMapper - 嵌套动态键【英文标题】:ObjectMapper - nested dynamic keys 【发布时间】:2017-06-28 15:19:21 【问题描述】:我正在使用 Swift 3.1 编写,使用 ObjectMapper 将我的 JSON 响应映射到我的模型。
我正在尝试使用动态键映射这个相当复杂的 JSON 响应,并希望得到一些关于我做错了什么的反馈。
一个小组有关于它的进步的统计数据。它的统计数据细分为年和月。一年内的每个月都有结果、投资回报率和胜利。投资回报率和胜利只是百分比,但结果键是固定的,下面的键是 1-5,然后是某个整数作为值。
我的 JSON
"stats":
"2017":
"1":
"results":
"1": 13,
"2": 3,
"3": 1,
"4": 1,
"5": 0
,
"roi": 0.40337966202464975,
"win": 0.8181818181818182
,
"2":
"results":
"1": 13,
"2": 5,
"3": 1,
"4": 2,
"5": 1
,
"roi": 0.26852551067922953,
"win": 0.717948717948718
我的模型
class GroupResponse: Mappable
var stats: [String: [String: StatsMonthResponse]]?
func mapping(map: Map)
stats <- map["stats"]
class StatsMonthResponse: Mappable
var tips: [String: Int]?
var roi: Double?
var win: Double?
func mapping(map: Map)
tips <- map["results"]
roi <- map["roi"]
win <- map["win"]
我得到了什么
我得到的响应在我的 GroupResponse 类中具有 stats 属性,为 nil。
我可以采取哪些其他方法来完成此任务,或者更改我的实现以完成此任务?
【问题讨论】:
【参考方案1】:解决方案
我通过手动映射 JSON 解决了我的问题。
class GroupResponse: Mappable
var stats: [String: StatsYear]?
func mapping(map: Map)
stats <- map["stats"]
class StatsYear: Mappable
var months: [String: StatsMonth] = [:]
override func mapping(map: Map)
for (monthKey, monthValue) in map.JSON as! [String: [String: Any]]
let month = StatsMonth()
for (monthKeyType, valueKeyType) in monthValue
if monthKeyType == "results"
let tipResultDict = valueKeyType as! [String: Int]
for (result, tipsForResult) in tipResultDict
month.tips[result] = tipsForResult
else if monthKeyType == "roi"
month.roi = valueKeyType as? Double
else if monthKeyType == "win"
month.win = valueKeyType as? Double
months[monthKey] = month
class StatsMonth
var tips: [String: Int] = [:]
var roi: Double?
var win: Double?
这个问题可能有更好的解决方案,但这是我现在坚持的。
希望这会有所帮助!
【讨论】:
感谢您的建议。我正在经历类似的事情,这非常有帮助。 很高兴能帮上忙! 非常感谢!以上是关于ObjectMapper - 嵌套动态键的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire,Objectmapper,Realm:嵌套对象
Swift - 嵌套对象的映射 (Objectmapper)