映射父对象内的对象数组 - Mantle iOS

时间:2014-05-30 01:28:18

标签: ios objective-c github-mantle

我有一些看起来像这样的json数据:

    {
       items: [
                { // object 1
                  aProperty: "aValue",
                  anotherProperty: "anotherValue",
                  anObjectProperty: {}
                 },
                 { //object 2
                  aProperty: "aValue",
                  anotherProperty: "anotherValue",
                  anObjectProperty: {}
                 } 
       ]
    }

我想使用Mantle将这个json映射到两个对象的数组中。

这将如下所示:

    @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

然而,这需要我去寻找&#34;项目&#34;键入json,然后解析该键内部的内容。

相反,我希望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;

这一切都很棒,但我相信创造一个&#34; MyObjects&#34; class,只是作为MyObject数组的占位符是过度的。有更好的解决方案吗?理想情况下,我正在寻找一个设置在地幔中的设置(或者比创建两个类只是为了获得一组对象更容易)来处理根&#34; item&#34;对我来说很关键,所以当它解析时,它只是作为一个包含2个对象的数组出现。

谢谢!

2 个答案:

答案 0 :(得分:2)

在我们在MTLJSONAdapter中映射Jsonobject的地方

如果json是对象类型,则该对象应该映射为

object = [MTLJSONAdapter modelOfClass:responseType fromJSONDictionary:jsonObject error:&error];

如果json是数组类型,则该对象应映射为

object = [MTLJSONAdapter modelsOfClass:responseType fromJSONArray:jsonObject error:&error];

[
       {
                { // object 1
                  aProperty: "aValue",
                  anotherProperty: "anotherValue",
                  anObjectProperty: {}
                 },
                 { //object 2
                  aProperty: "aValue",
                  anotherProperty: "anotherValue",
                  anObjectProperty: {}
                 } 
       }
       {
                { // object 1
                  aProperty: “bValue",
                  anotherProperty: "anotherValue",
                  anObjectProperty: {}
                 },
                 { //object 2
                  aProperty: “bValue",
                  anotherProperty: "anotherValue",
                  anObjectProperty: {}
                 } 
       }
]

如果是这种情况,可以像这样映射

object = [MTLJSONAdapter modelsOfClass:responseType fromJSONArray:jsonObject error:&error];

答案 1 :(得分:0)

NSArray *myArrayOfObjects = [MTLJSONAdapter modelsOfClass:responseType
                                            fromJSONArray:jsonObject[@"items"] 
                                                    error:&error]