JSONObject.toString:如何不转义斜杠

2022-08-31 22:37:14

我需要以 JSON 格式发送日期。日期字符串应如下所示:

"2013/5/15"

相反,会按如下方式转义它:JSONObject.toString

"2013\ /5\ /15"

我知道这样做是为了允许脚本标记内的json字符串,正如这个问题所解释的那样:JSON:为什么正斜杠被转义?

但在我的情况下,我不需要它。实际上,服务器返回错误。服务器没有处理这个问题,我无法修复服务器,所以我必须在移动客户端代码中修复它。

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

有没有办法在不转义斜杠的情况下序列化JSON对象?(如果可能的话,不逃避任何东西)

提前致谢。


答案 1

我最终选择了快速而肮脏的技巧,即在将序列化字符串发送到服务器之前替换序列化字符串中的转义斜杠。幸运的是,JSONObject也转义了反斜杠,所以我也必须取消它们。现在,如果我想故意发送“\ /”,转义字符串将是“\\/”,替换的结果是预期的原始字符串。


答案 2

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

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

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