【问题标题】:How to Convert JSON with dynamic keys with ObjectMapper?Swift:如何使用 ObjectMapper 转换带有动态键的 JSON?
【发布时间】:2016-02-13 00:46:55
【问题描述】:

我目前正在使用 ObjectMapper for Swift 将 JSON 对象从 API 映射到模型对象

我的 api 返回一个像这样的 JSON:

{
  "tracks": {
        "1322": {
          "id": 1322,
          "gain": 80
        },
        "1323": {
          "id": 1323,
          "gain": 80
        },
        "1324": {
          "id": 1324,
          "gain": 80
        },
        "1325": {
          "id": 1325,
          "gain": 80
        }
      }
}

感谢热心帮助解决这个问题...

干杯斯特凡

【问题讨论】:

  • 问题不是法线映射,是每个“track”的“key”是自己的id...

标签: json swift dynamic key


【解决方案1】:

我遇到了类似的问题。不幸的是,我还没有找到不使用索引或硬编码键来选择某些内容的方法。

但对于您的情况,您也许可以这样做:

func mapping(map: Map) {
    id <- map["0.id"]
    gain <- map["0.gain"]
}

【讨论】:

    【解决方案2】:

    我有类似的东西,这是我的 JSON:

    {
        "goals": {
            "total": 0,
            "ecpa": 0,
            "data": {
                "575afbdca5a101e3088b2b6554398b0c": {
                    "volume": 1,
                    "ecpa": 4,
                    "coa": "5.00"
                },
                "575afbdca5a101e3088b2b6554398frt": {
                    "volume": 3,
                    "ecpa": 1,
                    "coa": "1.00"
                }
    
            }
        }
     }
    

    这是实现 Mappable 协议的 StatsGoal 类

    import ObjectMapper
    
    class StatsGoal: Mappable {
        var total: Double?
        var ecpa: Double?
        var data: [String : StatsGoalData]?
    
        required init?(_ map: Map) {
    
        }
    
        // Mappable
        func mapping(map: Map) {
            total   <- map["total"]
            ecpa    <- map["ecpa"]
            data    <- map["data"]
        }
    }
    

    这是实现 Mappable 协议的 StatsGoalData,在 StatsGoal 类中用作类属性(子对象)

    import ObjectMapper
    
    class StatsGoalData: Mappable {
        var volume: Double?
        var ecpa: Double?
        var coa: Double?
    
        required init?(_ map: Map) {
    
        }
    
        // Mappable
        func mapping(map: Map) {
            volume  <- map["volume"]
            ecpa    <- map["ecpa"]
            coa     <- map["coa"]
        }
    }
    

    这就是映射后如何迭代数据属性

        for element in stats {
            let data = element.goals?.data
            for statsGoalData in data! {
                let statsGoalDataElement = statsGoalData.1
                    print(statsGoalDataElement.ecpa!)
            }
        }
    

    【讨论】:

    • 如果“数据”对象是 JSON 响应中的 JSON 数组怎么办?如何处理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多