2

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

问题是,使用 [string JSONValue] 方法阻塞,我可以看到它是由于换行符造成的。瞧,即使是常见问题解答也告诉我问题,但我不知道如何解决。

解析器无法解析字符串 X

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

如果您得到类似下面的内容(数字可能会有所不同),那么您的其中一个字符串中不允许包含 Unicode 控制字符。

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

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

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

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

4

3 回答 3

0

转义换行符应该可以工作。因此,理想情况下,下一行应该可以工作。只需检查您的输入是否还包含 '\r' 字符。

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

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

于 2011-12-21T07:53:20.113 回答
0

听起来您的 XSLT 不起作用,因为它没有生成合法的 JSON。这不足为奇,因为生成正确格式的 JSON 字符串并非易事。我想知道仅使用标准 XML 库将 XML 解析为您的应用程序可以使用的数据结构是否会更简单。

于 2012-09-03T16:32:06.153 回答
-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

于 2011-09-22T06:05:29.277 回答