如何使用ObjectMapper使用动态键映射字典?

问题描述 投票:1回答:2

我是ObjectMapper的新手。我有来自服务器的回复:

{
      "123123": 10,
      "435555": 2,
      "435333": 8,
      "567567": 4
}

密钥(动态)将成为ID。值将为COUNT。如何使用ObjectMapper进行映射?

我的代码无效,因为动态密钥:

extension Item: Mappable {

    private static let kId = "id"
    private static let kCount = "count"

    public init?(map: Map) {
        self.init()
    }

    mutating public func mapping(map: Map) {

        id <- map[Item.kId]
        count <- map[Item.kCount]
    }
}
ios swift objectmapper
2个回答
1
投票

你可以试试

 do{

    let res = try JSONDecoder().decode([String:Int].self, from: data)

}
catch {

    print(error)
}

0
投票

您的回复是一个对象,您可以通过map.JSON访问它,它的类型是[String: Any]。然后你可以像普通的Dictionary一样使用它。

在这里,我创建了一个名为Model的类,其中包含项目数组(类型为Item),而在func mapping(:Map)中,我将map.JSON元素映射到Item

class Model: Mappable {
    typealias Item = (id: String, count: Int)
    var items: [Item] = []

    required init?(map: Map) {

    }

    func mapping(map: Map) {
        let rawDictionary = map.JSON
        let items = rawDictionary.compactMap { (key, value) -> Item? in
            guard let intValue = value as? Int else { return nil }
            return (key, intValue)
        }
        self.items = items
    }
}

let jsonString = """
{
    "123123": 10,
    "435555": 2,
    "435333": 8,
    "567567": 4
}
"""

let model = Model(JSONString: jsonString)
print(model?.items[0])  //Optional((id: "123123", count: 10))

© www.soinside.com 2019 - 2024. All rights reserved.