次のようなjsonデータがあります。
{
items: [
{ // object 1
aProperty: "aValue",
anotherProperty: "anotherValue",
anObjectProperty: {}
},
{ //object 2
aProperty: "aValue",
anotherProperty: "anotherValue",
anObjectProperty: {}
}
]
}
Mantle を使用して、この json を 2 つのオブジェクトの配列にマップしたいと考えています。
これは次のようになります。
@interface MyObject : MTLModel <MTLJSONSerializing>
@property (nonatomic, strong) NSString *myProperty;
@property (nonatomic, strong) NSString *anotherProperty;
@property (nonatomic, strong) NSObject *anObject;
@end
@implementation MyObject
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"myProperty": @"myProperty",
@"anotherProperty" : @"anotherProperty",
@"anObject": @"anObject"
};
}
@end
ただし、これには、json で「items」キーを見つけて、そのキーの内容を解析する必要があります。
代わりに、Mantle にオブジェクト全体をマッピングしてもらいたいのです。だから、私はこの解決策を思いついた:
@interface MyObjects : MTLModel <MTLJSONSerializing>
@property (nonatomic) NSArray *items;
@end
@implementation MyObjects
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"items": @"items"
};
}
+ (NSValueTransformer *)itemsJSONTransformer
{
return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:[MyObject class]];
}
@end
すべてが設定されて完了すると、次のようなものが残ります
NSArray *myArrayOfObjects = (MyObjects*)myobjects.items;
これはすべて素晴らしいことですが、MyObject の配列のプレースホルダーになるためだけに「MyObjects」クラスを作成するのはやり過ぎだと思います。より良い解決策はありますか?理想的には、マントル (または、オブジェクトの配列を取得するためだけに 2 つのクラスを作成するよりも簡単なもの) で、ルートの「アイテム」キーを処理する設定を探しているので、これが解析されると、次のようになります。 2 つのオブジェクトの配列。
ありがとう!