我需要用JSON发送一个日期。日期字符串应如下所示:
"2013/5/15"
号
相反,JSONObject.toString逃逸如下:
"2013\ /5\ /15"
号
我理解这样做是为了在脚本标记中允许JSON字符串,正如这个问题所解释的:JSON:为什么反斜杠?
但在我的情况下,我不需要它。实际上,服务器正在返回一个错误。服务器没有处理这个问题,我无法修复服务器,所以我必须在移动客户端代码中修复它。
我可以在序列化后执行String.replace,但是如果我真的想在JSON的任何其他部分中包含/"字符串呢?
有没有一种方法可以在不转义斜杠的情况下序列化JSON对象?(如果可能的话,不要逃避任何东西)
事先谢谢。
最后,我选择了快速而肮脏的方法,在将序列化字符串发送到服务器之前替换它中的转义斜杠。幸运的是,jsonObject也可以避开反斜杠,所以我必须对它们进行unscape。现在,如果我想故意发送"/",则转义字符串将是"/",替换的结果将是预期的原始字符串。
这件事怎么还在发生,真奇怪!!anywho,我对JSON字符串进行了字符串替换,并获取了结果字符串并将其传递给StringEntity。它像魔术一样工作。谢谢,干杯!!
该行为是硬编码到jsonStringer.java中的,请参见方法private void string(String value),第302+行。
应该可以复制类JSONStringer并实现自己的value(Object)版本(第227+行)。然后在实用程序类中实现自己版本的jsonObject.toString(),并使用自己的jsonStringer而不是原来的。
编辑:子类化JSonStringer并不容易,因为value()调用了一个私有方法beforeValue(),而该方法无法访问。
也许另一个JSON库也会做你想做的事情,比如谷歌GSON。
你是对的。JsonWriter.setHtmlSafe方法似乎正好做到了这一点。默认设置为false,所以我猜这个库会生成未定型的JSON字符串。我没有时间来测试它,但是如果您这样做了,我会接受它作为解决方案:)
jsonObjSend.toString().replace("\\\","")
为我工作。有点卑鄙,但似乎没有其他解决办法。
jsonObjSend.toString().replace("\","")没有为我工作,但jsonObjSend.toString().replace("\\\","")工作了。原因是什么?
在处理编码到ADATURI"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;
而不是import org.json.simple.JSONObject;。
它会起作用的。
。