2011-09-22 32 views
2

我有一些从web服务返回的xml。我反过来使用xslt将该xml转换为json(我将其他人的xml服务转换为基于json的服务)。现在正在输出JSON的我的服务被我的iPhone应用程序使用事实上的iPhone json框架SBJSON消耗。Stig JSON库解析错误:如何在JSON中容纳新行?

问题是,使用[string JSONValue]方法扼流圈,我可以看到它是由于换行符。你看,即使是常见问题解答告诉我的问题,但我不知道如何解决它。

分析器无法解析字符串X

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

如果您得到类似于下面的内容(数字可能有所不同),则其中一个字符串不允许使用Unicode控制字符。

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

我一直在使用的线路,如尝试:NSString *myString = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];

但是,这并不工作。我的xml服务不会作为CDATA回来。据我所知,xml中有一个换行符(我将如何确认这一点)。我只是想忠实地将换行符转换为JSON。

我实际上已经花了整整一天的时间,所以现在是时候提问了。我再也没有骄傲了。 非常感谢

回答

-1

我没有为你解决,但我通常使用CJSONSerializer和CJSONDeserializer从TouchJSON项目,这是非常可靠的,我从未有过线路有问题之前中断。只是一个想法。

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

+0

“忽略错误”不是一个好策略,IMO。更好地处理这个问题,而不是忽视症状。 –

0

逃离一个新行字符应该工作。所以下面的线应该是理想的工作。只要检查你的输入是否也包含'\ r'字符。

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

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

0

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