我是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]
}
}
你可以试试
do{
let res = try JSONDecoder().decode([String:Int].self, from: data)
}
catch {
print(error)
}
您的回复是一个对象,您可以通过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))