我有一些看起来像这样的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个对象的数组出现。
谢谢!
答案 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]