JSONObject.toString:如何不转义斜杠

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

“2013年5月15日”

相反, JSONObject.toString转义它如下:

“2013 / 5 / 15”

我知道这样做是为了允许json字符串在脚本标签中,正如这个问题所解释的:JSON:为什么正斜杠会逃脱?

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

序列化后我可以做一个String.replace ,但是如果我真的想在JSON的其他部分包含“ /”字符串呢?

有没有一种方法来序列化JSON对象而不用斜线? (如果可能的话,不要逃脱任何东西)

提前致谢。


我最终选择了在将序列化字符串中的转义斜线替换为服务器之前快速肮脏的技巧。 幸运的是,JSONObject也逃脱反斜杠,所以我也必须隐藏它们。 现在,如果我想故意发送“ /”,转义字符串将是“ /”,并且替换的结果是原始字符串。


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

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

编辑:继承JSONStringer并不容易,因为value()调用了无法访问的beforeValue()私有方法。


jsonObjSend.toString().replace("\","")

为我工作。 有点诡计,但似乎没有其他解决方案。

链接地址: http://www.djcxy.com/p/47925.html

上一篇: JSONObject.toString: how NOT to escape slashes

下一篇: How to unescape a Java string literal in Java?