如何以JSON格式记录NSData JSON响应



是否可以将NSDataNSLog 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, NSArrayNSDictionary对象,而不是自定义对象),因此无需任何代码即可工作。例如,你是否试图将其保存到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,分析它并打印出你需要的信息。

最新更新