JSONObject.toString:如何不转义斜杠

Mis*_*ith 32 java android json

我需要用JSON发送日期.日期字符串应如下所示:

"2013年5月15日"

相反,JSONObject.toString逃避它如下:

"2013\/ 5\/ 15"

我知道这样做是为了允许在脚本标签内部使用json字符串,因为这个问题解释了: JSON:为什么正斜杠被转义了?

但就我而言,我并不需要它.实际上服务器返回错误.服务器没有处理这个,我无法修复服务器,所以我必须在移动客户端代码中修复它.

String.replace序列化后我可以做一个,但如果我真的想在JSON的任何其他部分包含"\ /"字符串怎么办?

有没有办法序列化JSON对象而不转义斜杠?(如果可能,不逃避任何事情)

提前致谢.

Mis*_*ith 7

我终于选择了在将序列化字符串中的转义斜杠替换为发送到服务器之前的快速而肮脏的技巧.幸运的是,JSONObject也会逃避反斜杠,所以我也必须取消它们.现在,如果我想故意发送"\ /",则转义字符串将为"\\ /",并且替换的结果是原始字符串.


dev*_*ole 5

该行为被硬编码到JSONStringer.java 中,请参阅方法private void string(String value),第302+行。

应该可以复制类JSONStringer并实现您自己的版本value(Object)(第 227+ 行)。然后在实用程序类中实现您自己的JSONObject .toString()版本并使用您自己的 JSONStringer 而不是原始版本。

编辑:子类化 JSONStringer 并不容易,因为 value() 调用了一个无法访问的私有方法 beforeValue()。

  • 你是对的。“JsonWriter.setHtmlSafe”方法似乎正是这样做的。默认设置是 false,所以我猜这个库会生成非转义的 JSON 字符串。我没有时间测试它,但如果你这样做了,我会接受这个解决方案:) (2认同)

Vin*_*nay 5

jsonObjSend.toString().replace("\\\\","")
Run Code Online (Sandbox Code Playgroud)

为我工作。有点肮脏的把戏,但似乎没有其他解决方案。

  • `jsonObjSend.toString().replace("\\","") ` 对我不起作用,但 `jsonObjSend.toString().replace("\\\\","") ` 工作。原因是什么? (4认同)
  • 不应该是 `jsonObject.toString().replace("\\/","/")` ??? (2认同)