NSONbject数据模型的JSONRepresentation

时间:2011-12-09 19:34:07

标签: iphone objective-c ios cocoa ipad

我正在尝试解析我在数据模型中填充的所有数据。我在nsobject中有一些nsmutabledictionary,只是很奇怪是否可以获得该对象类型的json表示?我使用ASIHTTPREQUEST获得了JSON的无效类型。所以这里显而易见的问题是,如果可能,或者我必须遍历对象并将其插入nsdictionary然后解析它?

由于

2 个答案:

答案 0 :(得分:2)

您可能想要检查我的实现以将NSObjects序列化为JSON,反之亦然 - https://github.com/QBurst/KVCObjectSerializer

答案 1 :(得分:1)

如果不了解您尝试序列化为JSON的对象,则很难完全回答您的问题,但要解释哪些对象可以序列化并不难(假设您正在使用TouchJSON)。如果你看一下CJSONSerializer.m中的-isValidJSONObject方法,你会看到确切地序列化哪些类:

- (BOOL)isValidJSONObject:(id)inObject
    {
    if ([inObject isKindOfClass:[NSNull class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSNumber class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSString class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSArray class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSDictionary class]]) { return(YES); }
    else if ([inObject isKindOfClass:[NSData class]]) { return(YES); }
    else if ([inObject respondsToSelector:@selector(JSONDataRepresentation)])
    {
        return(YES);
    }
    else
    {
        return(NO);
    }
}

(为清晰起见,代码已重新格式化。)

因此,您可以看到NSNULL,NSNumber,NSString,NSArray,NSDictionary和NSData都可以序列化为JSON,并且任何实现-JSONDataRepresentation的类也是可序列化的。

基于您显然正在获取的“JSON的无效类型”错误,我猜您图中的至少一个对象不在上面列出的那些中,并且您可能希望实现-JSONDataRepresentation在相应的类中。

更新:根据您的评论,我发现您使用的是SBJSON而不是TouchJSON。 This page包含SBJSON支持的类型列表。