如何以 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 你的 NSData
和 this 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(仅 NSString
、NSNumber
、NSArray
和 NSDictionary
对象,而不是自定义对象),它在没有任何更多代码。
例如,您是否尝试将其保存到 NSUserDefaults
中并且它也不是 .plist(这也是我尝试过的一个,我将 jsonData
保存到内存中,并使用 dictionaryWithContentsOfFile:
让我很奇怪答案,但其中一个重要的问题是:“”$class”=“{value = 23}”;”这导致我 NSKeyArchiver
/NSKeyUnarchiver
)。我不知道你到底做了什么。
• 结论:
很明显,在某个地方,您混合了在网络上找到的东西。你需要返工。你不能让它这样。您的代码在其他地方有问题。你从哪里得到 jsonData
?你用它做了什么?
有什么方法可以 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 你的 NSData
和 this 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(仅 NSString
、NSNumber
、NSArray
和 NSDictionary
对象,而不是自定义对象),它在没有任何更多代码。
例如,您是否尝试将其保存到 NSUserDefaults
中并且它也不是 .plist(这也是我尝试过的一个,我将 jsonData
保存到内存中,并使用 dictionaryWithContentsOfFile:
让我很奇怪答案,但其中一个重要的问题是:“”$class”=“{value = 23}”;”这导致我 NSKeyArchiver
/NSKeyUnarchiver
)。我不知道你到底做了什么。
• 结论:
很明显,在某个地方,您混合了在网络上找到的东西。你需要返工。你不能让它这样。您的代码在其他地方有问题。你从哪里得到 jsonData
?你用它做了什么?