带有JSON响应的NSData到NSString

时间:2013-06-27 08:01:58

标签: ios json encoding nsstring nsdata

NSData * jsonData 是包含JSON数据的http响应。

NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString: %@", jsonString);

我得到了结果:

{ "result": "\u8aaa" }

将数据编码为正确的字符串的正确方法是什么,而不是像" \ uxxxx"这样的unicode字符串?

2 个答案:

答案 0 :(得分:19)

如果您转换JSON数据

{ "result" : "\u8aaa" }

NSDictionary(例如使用NSJSONSerialization)并打印字典

NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"%@", jsonDict);

然后你会得到输出

{
    result = "\U8aaa";
}

原因是description的{​​{1}}方法使用“\ Unnnn”转义序列 对于所有非ASCII字符。但这仅适用于控制台中的 display ,字典正确

如果您打印键的值

NSDictionary

然后你会得到预期的输出

NSLog(@"%@", [jsonDict objectForKey:@"result"]);

答案 1 :(得分:0)

我不太明白问题是什么。 AFNetworking为您提供了有效的JSON数据包。如果您希望上面的代码输出字符而不是\u…转义序列,您应该哄骗服务器为您提供结果以更改其输出。但这不应该是必要的。您最有可能接下来要做的是通过JSON反序列化程序运行它......

NSDictionary * data = [NSJSONSerialization JSONObjectWithData:jsonData …];

...你应该得到以下字典:@{@"result":@"說"}。请注意,result键包含一个包含单个字符的字符串,我猜这是你想要的。

顺便说一句:将来,我建议你将输出复制粘贴到你的问题中,而不是手工转录。它将避免几轮不必要的修正和混乱。