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