7

我有一些看起来像这样的 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

但是,这需要我在 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;

这一切都很好,但我相信创建一个“MyObjects”类只是为了作为 MyObject 数组的占位符是矫枉过正的。有更好的解决方案吗?理想情况下,我正在寻找一个为我处理根“项目”键的地幔设置(或者比创建两个类更容易获取对象数组的设置),这样当它解析时,它就出来了2 个对象的数组。

谢谢!

4

2 回答 2

3

在我们在 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];
于 2014-07-11T07:34:17.160 回答
0
NSArray *myArrayOfObjects = [MTLJSONAdapter modelsOfClass:responseType
                                            fromJSONArray:jsonObject[@"items"] 
                                                    error:&error]
于 2016-12-11T03:36:19.997 回答