7

次のような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 つのオブジェクトの配列。

ありがとう!

4

2 に答える 2