我正在尝试使用动态密钥映射这个相当复杂的JsON响应,并希望得到一些关于我做错的反馈.
一个小组有关于它的进展的统计数据.它的统计数据分为几年甚至几个月.一年内每个月都有结果,投资回报率和胜利. ROI和win只是百分比,但结果键是用下面的键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,"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.
我可以采取哪些其他方法来实现这一目标,或者改变我的实现来完成这项工作?
解决方法 解我通过手动映射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?}
这个问题可能是一个更好的解决方案,但这就是我现在所坚持的.
希望这有帮助!
总结以上是内存溢出为你收集整理的ios – ObjectMapper – 嵌套的动态键全部内容,希望文章能够帮你解决ios – ObjectMapper – 嵌套的动态键所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)