我需要发送JSON格式的日期,日期字符串应该如下所示:
“2013年5月15日”
相反,JSONObject.toString
将按如下方式对其进行转义:
二○一三年五月十五日
我知道这样做是为了允许脚本标记中包含json字符串,正如这个问题所解释的:JSON: why are forward slashes escaped?
但是在我的例子中我不需要它,事实上服务器返回了一个错误,服务器没有处理这个错误,我不能修复服务器,所以我必须在移动的客户端代码中修复它。
我可以在序列化String.replace
之后再执行它,但是如果我实际上想在JSON的任何其他部分包含“\ /”字符串,该怎么办?
有没有一种方法可以在不转义斜杠的情况下序列化JSON对象?(如果可能,不转义任何内容)
6条答案
按热度按时间yzxexxkh1#
最后我选择了一个快速而肮脏的技巧,在将序列化字符串发送到服务器之前替换其中的转义斜杠。幸运的是,JSONObject也会转义反斜杠,所以我还必须取消它们的转义。现在,如果我想有意发送“\ /”,转义字符串将是“\/”,替换的结果将是原来的字符串。
sirbozc52#
这种行为被硬编码到JSONStringer.java中,参见方法
private void string(String value)
,第302+行。应该可以复制类
JSONStringer
并实现您自己版本的value(Object)
(第227+行),然后在一个实用程序类中实现您自己版本的JSONObject.toString(),并使用您自己的JSONStringer而不是原来的。编辑:子类化JSONStringer并不容易,因为value()调用了一个无法访问的私有方法。
csbfibhn3#
对我有用。有点卑鄙的伎俩,但似乎没有其他解决办法。
nukf8bse4#
在处理编码到adat URI“data:image/png a”中的图像数据时,我遇到了JSONObject“put”的类似问题。put函数将添加另一个斜线以将格式改变为“data:image/png; base64,....."。问题的根源似乎是JSONObject“put”函数中的字符串值检查,该函数添加了额外的斜杠。可能会重载该函数或扩展该类,但我发现最简单的方法是添加一个唯一的字符串(如guid),然后在调用JSONObject的toString()函数后用URI字符串替换该guid。
v2g6jxz65#
当我使用
您需要反序列化此JSON。
cnjp1d6j6#
问题出在进口商品上。
使用以下导入:-
代替
import org.json.simple.JSONObject;
会成功的。