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

时间:2016-08-31 09:50:58

标签: objective-c json nsstring nsdata nslog

我能以NSLog格式JSON NSData回复JSON吗?

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

In this post他们正在打印NSDictionary,我可以将其转换为NSDictionary。并且this解决方案返回(null)

我如何以JSON格式NSLog

3 个答案:

答案 0 :(得分:1)

•出了什么问题:
jsonData(正如您所说)不是表示JSON的hexData。

•快速黑客(不可行的解决方案!)让您的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参数,我们不应该。在 NSJSONWritingPrettyPrinted参数中使用0而不是options:,您的结果几乎与CodeBeautify的结果类似。

•我是如何到达那里的:
第四,我使用this answer复制/粘贴NSData的凹凸字符串。 那样的话,我得到了jsonData。 然后,我尝试了应该给你的信息:

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

哪个不起作用给出错误:

  

错误域= NSCocoaErrorDomain代码= 3840“操作不能   完成。 (可可错误3840.)“(字符0周围的值无效。)   UserInfo = 0x17598540 {NSDebugDescription =字符周围的值无效   0}

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

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

答案 1 :(得分:0)

代码:

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

答案 2 :(得分:0)

There are different situations. If parsing the JSON data was fine, then you just want to log the result (dictionary or array). If parsing the JSON data failed, and you suspect there is something wrong with the JSON data, then you convert the JSON data to an NSString and log that. And finally, if either conversion to NSString failed, or you look at the NSString and can't find what's wrong with it, then you log the NSData itself to be able to see the bytes. That's useful if someone managed to put control characters or some other nonsense into your JSON data.

The best is to write a method (warning! not for the timid! requires writing code yourself) that takes the NSData, analyses it and prints out the information that you need.