使用具有根密钥的Mantle解析JSON

时间:2015-10-23 12:16:53

标签: objective-c json github-mantle overcoat

我尝试解析从REST-Webservice获得的JSON。

Seat.json:

{"seat":{ "row":1,
          "seatNr":1,
          "seatId":5782}}

我的MTLModel(这不起作用。因为json字段前面有一个座位。)

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
         @"seatId"  :@"seatId",
         @"row"     :@"row",
         @"seatNr"  :@"seatNr"};
}

这样可行,因为它通过座位词典访问字段。

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
         @"seatId"  :@"seat.seatId",
         @"row"     :@"seat.row",
         @"seatNr"  :@"seat.seatNr"};
}

但是嵌套对象不起作用。示例JSON:

{"participant": {"name":"Test User",
                 "participantId":4243,
                 "chosenSeat":{"row":1,
                         "seatNr":21,
                         "seatId":5802}
                }

映射:

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
    return @{
         @"name"            : @"participant.name",
         @"participantId"   : @"participant.participantId",
         @"seat"            : @"participant.chosenSeat"};
}

+ (NSValueTransformer *)seatJSONTransformer {
    return [MTLJSONAdapter dictionaryTransformerWithModelClass:Seat.class];
}

这不起作用,因为座位映射仅在字典以座位开头时才有效。

如何将Mantle SDK与JSON对象一起使用?

1 个答案:

答案 0 :(得分:0)

似乎seat不是使用Mantle初始化对象所需数据的一部分,所以我会使用:

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
         @"seatId"  :@"seatId",
         @"row"     :@"row",
         @"seatNr"  :@"seatNr"};
}

(或mtl_identityPropertyMapWithModel

然后在解析JSON时使用:

NSError *error = nil;
Seat *seat = [MTLJSONAdapter modelOfClass:Seat.class
    fromJSONDictionary:sourceJSON[@"seat"] error:&error];