如何以 JSON 格式 NSLog NSData JSON 响应?

How to NSLog NSData JSON response in JSON format?

有什么方法可以 NSLog JSON NSData 的响应以 JSON 格式?

NSLog(@"JSON NSString: %@" ,jsonData);

In this post they are printing NSDictionary,I can convert it to NSDictionary. and this解法returns(null).

我怎样才能 NSLog 变成 JSON 格式?

代码:

NSLog("Formatted JSON : %@" ,[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);

有不同的情况。如果解析 JSON 数据没问题,那么您只想记录结果(字典或数组)。如果解析 JSON 数据失败,并且您怀疑 JSON 数据有问题,那么您将 JSON 数据转换为 NSString 并记录它。最后,如果转换为 NSString 失败,或者您查看 NSString 却找不到它的问题,那么您可以记录 NSData 本身以便能够看到字节。如果有人设法将控制字符或其他一些废话放入您的 JSON 数据中,这将很有用。

最好是编写一个方法(警告!胆小者勿入!需要自己编写代码)获取 NSData,对其进行分析并打印出您需要的信息。

• 怎么了:
jsonData(如您所给)不是表示 JSON.

的十六进制数据

• 快速 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.

中的结果相似

• 我是怎么到那里的:
首先,我 copy/paste 你的 NSDatathis answer 的碰撞字符串。 这样,我得到了 jsonData 和你一样。 然后,我简单地试了一下应该给你的信息:

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&errorJSON];

哪个不工作给出错误:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x17598540 {NSDebugDescription=Invalid value around character 0.}

但是有了NSDictionary *dictWithData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData];,我设法得到了真正的NSDictionary。但是 NSKeyedArchiver/NSKeyedUnarchiver 正在做一些 "equivalent" 到 NSJSONSerialization 的事情:它序列化,将 NSObject 转换为 NSData(反之亦然)。但更强大:适用于 NSCoding 兼容的任何类型的对象。在这里,因为它最初来自 JSON(仅 NSStringNSNumberNSArrayNSDictionary 对象,而不是自定义对象),它在没有任何更多代码。 例如,您是否尝试将其保存到 NSUserDefaults 中并且它也不是 .plist(这也是我尝试过的一个,我将 jsonData 保存到内存中,并使用 dictionaryWithContentsOfFile: 让我很奇怪答案,但其中一个重要的问题是:“”$class”=“{value = 23}”;”这导致我 NSKeyArchiver/NSKeyUnarchiver)。我不知道你到底做了什么。

• 结论:
很明显,在某个地方,您混合了在网络上找到的东西。你需要返工。你不能让它这样。您的代码在其他地方有问题。你从哪里得到 jsonData?你用它做了什么?