Java JSONObject.toString:如何避免斜杠

Java JSONObject.toString:如何避免斜杠,java,android,json,Java,Android,Json,我需要用JSON发送一个日期。日期字符串应如下所示: “2013/5/15” 相反,JSONObject.toString按如下方式对其进行转义: “2013\/5\/15” 我知道这样做是为了允许脚本标记中包含json字符串,正如这个问题所解释的: 但就我而言,我不需要它。事实上,服务器正在返回一个错误。服务器没有处理这个问题,我无法修复服务器,所以我必须在移动客户端代码中修复它 我可以做一个字符串。在序列化它之后替换它,但是如果我真的想在JSON的任何其他部分包含“\/”字符串呢 有没有一

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

“2013/5/15”

相反,
JSONObject.toString
按如下方式对其进行转义:

“2013\/5\/15”

我知道这样做是为了允许脚本标记中包含json字符串,正如这个问题所解释的:

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

我可以做一个
字符串。在序列化它之后替换它,但是如果我真的想在JSON的任何其他部分包含“\/”字符串呢

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


提前感谢。

该行为是硬编码的,请参阅方法
私有无效字符串(字符串值)
,第302行+

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


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

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

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

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

当处理编码到adat Uri“data:image/png;base64,…”中的图像数据时,我对JSONObject“put”有类似的问题。put函数将添加另一个斜杠,将格式更改为“data:image/png;base64,…”。问题的根源似乎是JSONObject“put”函数中添加额外斜杠的字符串值检查。可以重载函数或扩展类,但我发现最简单的方法是添加一个唯一的字符串,如guid,然后在调用JSONObject的toString()函数后用Uri字符串替换该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);

问题在于进口

使用以下导入:-

import org.json.JSONException;
import org.json.JSONObject; 
而不是导入org.json.simple.JSONObject

它会起作用的


也许另一个JSON库也会满足您的需要,例如,请参见。您是对的。
JsonWriter.setHtmlSafe
方法似乎正是这样做的。默认设置为false,所以我猜这个库会生成未定型的JSON字符串。我没有时间测试它,但如果你测试了,我会接受这个解决方案:)这是非常奇怪的事情,为什么它仍然在发生!!总之,我对json字符串进行了字符串替换,得到了结果字符串并将其传递给StringEntity。它起了神奇的作用。谢谢,干杯
jsonObjSend.toString().replace(“\\”,”)
对我不起作用,但是
jsonObjSend.toString().replace(“\\\”,”)
起作用了。原因可能是什么?不应该是
jsonObject.toString()。替换(“\\/”,“/”)
???