JSONObject.toString:如何不转义斜杠

我需要用JSON发送date。 datestring应该如下所示:

“2013年5月15日”

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

“2013 \ / 5 \ / 15”

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

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

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

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

提前致谢。

我最终select了在将序列化string中的斜杠replace发送到服务器之前的快速和肮脏的技巧。 幸运的是,JSONObject也逃避反斜杠,所以我也必须隐藏它们。 现在,如果我想故意发送“\ /”,转义string将是“\\ /”,replace的结果是原来的string。

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

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

编辑:Subclassing JSONStringer将不容易,因为value()调用一个私有方法beforeValue(),无法访问。

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

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

在处理被编码为adat Uri“data:image / png; base64,…..”的图像的数据时,我遇到了类似的JSONObject“put”问题。 put函数会添加另一个斜杠来将格式更改为“data:image / png; base64,…..”。 看起来问题的根源是JSONObject“put”函数中的string值检查,该函数添加了额外的斜线。 也许有人可能会重载函数或扩展类,但我发现最简单的方法是添加一个唯一的string,如GUID,然后在您的JSONObject的toString()函数调用后用您的Uristringreplace该GUID。

 JSONObject userJson = new JSONObject(); String myimageUri = "data:image/png;base64,XXXDATAXXX"; userJson.put("imageUri", "b0c8f13d-48b1-46b4-af28-4e2d8004a6f8"); userJson.toString().replace("b0c8f13d-48b1-46b4-af28-4e2d8004a6f8", myimageUri);