是否可以将NSData
的NSLog
JSON
响应转换为JSON
格式?
NSLog(@"JSON NSString: %@" ,jsonData);
在这篇文章中,他们打印NSDictionary
,我可以将其转换为NSDictionary。此解返回(null)
。
如何在JSON格式NSLog
?
•怎么了:
jsonData
(如你所给的)不是一个表示JSON的hexData。•快速hack(不可行的解决方案!)让您的JSON在您的网站中使用CodeBeautify:
NSDictionary *dictFromData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData];
NSData *realJSONData = [NSJSONSerialization dataWithJSONObject:dictFromData options:0 error:nil];
NSString *strFINAL = [[NSString alloc] initWithData:realJSONData encoding:NSUTF8StringEncoding];
NSLog(@"StrFINAL: %@", strFINAL);
注意:是的,我绕过了error
参数,我们不应该。使用options:
参数中的
NSJSONWritingPrettyPrinted
而不是0
,您得到的结果几乎与CodeBeautify的结果相似。
•How did I get there:
首先,我用这个答案复制/粘贴NSData
的bump字符串。这样,我得到的jsonData
和你得到的一样。然后,我简单地尝试了一下给出你的信息应该怎么写:
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&errorJSON];
Error Domain=NSCocoaErrorDomain Code=3840 "该操作无法执行。完成。(Cocoa错误3840)"(字符0周围的值无效。)UserInfo=0x17598540 {NSDebugDescription=无效的字符0。}
但与NSDictionary *dictWithData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData];
,我设法得到真正的NSDictionary
。但是NSKeyedArchiver
/NSKeyedUnarchiver
正在做一些"等同于"NSJSONSerialization
的事情:它进行序列化,将NSObject
转换为NSData
(反之亦然)。但更强大:任何类型的对象是NSCoding
兼容。这里,由于它最初来自JSON(只有NSString
, NSNumber
, NSArray
和NSDictionary
对象,而不是自定义对象),因此无需任何代码即可工作。例如,你是否试图将其保存到NSUserDefaults
中,它也不是。plist(这也是我的尝试之一,我将jsonData
保存到内存中,并使用dictionaryWithContentsOfFile:
给我奇怪的答案,但在它的碰撞中重要的一个:"$class"="{value = 23}";"这导致我到NSKeyArchiver
/NSKeyUnarchiver
)。我不知道你到底做了什么。
•结论:
很明显,在某个地方,你把在网上找到的东西混在一起了。你需要重做。你不能让它这样。代码中其他地方有问题。你从哪里得到jsonData
?你用它做了什么?
代码:
NSLog("Formatted JSON : %@" ,[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
有不同的情况。如果解析JSON数据没问题,那么只需记录结果(字典或数组)。如果解析JSON数据失败,并且你怀疑JSON数据有问题,那么你可以将JSON数据转换为NSString并记录。最后,如果转换到NSString失败,或者你看NSString找不到它的问题,然后你记录NSData本身以能够看到字节。如果有人设法将控制字符或其他一些无意义的东西放入JSON数据中,这是有用的。
最好是写一个方法(警告!不适合胆小的人!需要自己写代码)它获取NSData,分析它并打印出你需要的信息。