【发布时间】:2017-01-06 05:42:37
【问题描述】:
我的旧 JSON 结构是这样的:
{
"parameters": {
"customerId": 9,
"from": "2014-06-05T14:00:00",
"until": "2014-06-05T15:00:00",
"km": 20,
"insurance": false
},
"estimatesPerCategory": {
"2": {
"timeCost": 5,
"kmCost": 6,
...
}
为了解析 JSON,我使用 ObjectMapper。 这段代码效果很好:
if let myObject = Mapper<CostEstimateResult>().map(JSONObject: JSON) {
}
CostEstimateResult 类如下所示。
class CostEstimateResult : NSObject, Mappable {
var parameters:CostEstimateParameters?
var estimatesPerCategory:[String: CostEstimate]? // CostEstimate.id -> CostEstimate
override init() {}
required convenience init?(map: Map) {
self.init()
self.mapping(map: map)
}
func mapping(map: Map) {
estimatesPerCategory <- map["estimatesPerCategory"]
parameters <- map["parameters"]
}
}
最后但并非最不重要的是我的 CostEstimate 类的estimatesPerCategory
class CostEstimate : NSObject, Mappable {
var timeCost:NSNumber?
...
override init() {}
required convenience init?(map: Map) {
self.init()
self.mapping(map: map)
}
func mapping(map: Map) {
timeCost <- map["timeCost"]
...
}
}
这是有效的。 CostEstimateResult 中的映射器将调用 CostEstimates 中的映射器,我得到我的解析数据。
现在我更改了 JSON 结构:
{
"parameters": {
//same like before
},
"estimatesPerCategory": {
"2": {
"total": {
"preTax": {
"value": 1,
"text": "1,00 €"
},
"configTax": false
},
"3": {
//same...
}
}
}
在我看来,基本结构没有任何变化。 estimatesPerCategory 仍然是同一个字典。 estimatesPerCategory后面的数据改了,好吧。
问题是,当我调用映射器...Mapper<CostEstimateResult>().map... 时,将解析参数,但不会解析costEstimates。 CostEstimate 中的 func mapping 不再调用。
长话短说:estimatesPerCategory 中的 estimatesPerCategory 的类型似乎随着 json 结构而变化。我不知道我需要哪种类型。
【问题讨论】:
标签: ios json swift dictionary objectmapper