如何使用JSONModel将NSArray序列化为JSON

时间:2013-08-13 21:45:48

标签: objective-c nsarray jsonmodel

奇怪的是,似乎没有任何公共方法来序列化数组,但显然可以在序列化数组属性时进行。我有一个带有数组属性的JSONModel继承类。我希望获得该属性的JSON文本表示,而不是整个对象。

我不介意修改源代码,但是对于在哪里观看会有所了解。

另一个想法是将每个对象单独序列化为JSON并将它们包装在[]中。

2 个答案:

答案 0 :(得分:6)

<强>解释

JSONModel模型表示JSON对象 - 它将JSON键与模型类的属性相匹配。这就是为什么你不能直接创建一个JSONModel类,它匹配一个顶级对象是数组的JSON feed。例如:

  

[obj1,obj2,obj3等...]

没有与房产相匹配的钥匙。

现在你问的是同样的情况,但相反。您无法将NSArray导出为JSON,因为没有JSONModel可以处理它。如果你有一个具有一个属性的模型,这是一个NSArray - 那么它很容易。该属性将被映射到1个JSON密钥,NSArray内容将作为其内容导出。

<强>解决方案:

如果你有一个包含JSONModel实例的NSArray,你应该使用以下方法:

NSArray* jsonObjects = [YourModelClass arrayOfDictionariesFromModels: modelObjects];

上面的行将注意将模型类正确导出到字典,然后您可以使用NSJSONSerialization将jsonObjects导出为JSON。

以下是该方法的文档:

http://www.jsonmodel.com/docs/Classes/JSONModel.html#//api/name/arrayOfDictionariesFromModels:

答案 1 :(得分:4)

最终实际上很容易实现自己。很奇怪,这不仅仅包含在库中:

@implementation NSArray (JSONModelExtensions)

- (NSString*)toJSONString {
    NSMutableArray* jsonObjects = [NSMutableArray new];
    for ( id obj in self )
        [jsonObjects addObject:[obj toJSONString]];
    return [NSString stringWithFormat:@"[%@]", [jsonObjects componentsJoinedByString:@","]];
}

@end