Stig JSON库解析错误:如何容纳JSON中的新行?

时间:2011-09-22 05:05:01

标签: iphone json parsing sbjson

我有一些从Web服务返回的xml。我反过来使用xslt将xml转换为json(我将其他人的xml服务转换为基于json的服务)。我的服务,现在正在输出JSON,由我的iphone应用程序使用事实上的iphone json框架SBJSON消费。

问题是,使用[string JSONValue]方法chokes,我可以看到它是由于换行。瞧,甚至常见问题解答告诉我问题,但我不知道如何解决它。

解析器无法解析字符串X

你确定它是合法的JSON吗?这个框架非常严格,所以不会接受(显然)几个验证器接受的东西。特别是,字符串标记中的字面TAB,NEWLINE或CARRIAGE RETURN(以及所有其他控制字符)字符是不允许的,但可能很难发现。 (当然,这些字符在令牌之间是允许的。)

如果你得到类似下面的内容(数字可能会有所不同),那么你的一个字符串就不允许使用Unicode控制字符。

NSLocalizedDescription =“未转义的控制字符'0x9'”;

我尝试使用以下行:NSString *myString = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];

但这不起作用。我的xml服务不会以CDATA的形式返回。据我所知,xml确实有一个换行符(我将如何确认)。我只想忠实地将换行符传递给JSON。

我实际上花了整整一天时间,所以是时候问了。我不再自豪了。 非常感谢

3 个答案:

答案 0 :(得分:0)

转义新行字符应该有效。所以跟随线应该理想的工作。只需检查您的输入是否还包含'\ r'字符。

 NSString *myString = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];

您可以使用任何支持显示所有字符的编辑器(不可显示的字符)来检查字符串中存在哪个控制字符。例如使用Notepad ++,您可以查看字符串中包含的所有字符。

答案 1 :(得分:0)

听起来你的XSLT不起作用,因为它不会产生合法的JSON。这并不奇怪,因为生成格式正确的JSON字符串并非完全无关紧要。我想知道使用标准XML库将XML解析为应用程序可以使用的数据结构是否更简单。

答案 2 :(得分:-1)

我没有适合您的解决方案,但我通常使用TouchJSON项目中的CJSONSerializer和CJSONDeserializer,它非常可靠,我之前从未遇到过换行问题。只是一个想法。

http://code.google.com/p/touchcode/source/browse/TouchJSON/Source/JSON/CJSONDeserializer.m?r=6294fcb084a8f174e243a68ccfb7e2c519def219 http://code.google.com/p/touchcode/source/browse/TouchJSON/Source/JSON/CJSONSerializer.m?r=3f52118ae2ff60cc34e31dd36d92610c9dd6c306