我的旧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"]
}
}
最后但并非最不重要的是我对CostPerCategory的CostEstimate类
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。 func mapping
中的CostEstimate
不再调用。
长话短说:似乎estimatesPerCategory
中CostEstimateResult
的类型随json结构而变化。我无法弄清楚我需要哪种类型。
答案 0 :(得分:0)
现在使用新的JSON结构,您的Class CostEstimate
结构将被更改,并且需要创建新的类PreTax
:
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"]
}
}
class CostEstimate : NSObject, Mappable {
var total:totalTax?
override init() {}
required convenience init?(map: Map) {
self.init()
self.mapping(map: map)
}
func mapping(map: Map) {
total <- map["total"]
}
}
class totalTax : NSObject, Mappable {
var preTax:PreTax?
var configTax:Bool?
override init() {}
required convenience init?(map: Map) {
self.init()
self.mapping(map: map)
}
func mapping(map: Map) {
preTax <- map["preTax"]
configTax <- map["configTax"]
}
}
class PreTax : NSObject, Mappable {
var value:NSNumber?
var text:String?
override init() {}
required convenience init?(map: Map) {
self.init()
self.mapping(map: map)
}
func mapping(map: Map) {
value <- map["value"]
text <- map["text"]
}
}