java json 斜杠_关于java:JSONObject.toString:如何不转义斜杠

我需要用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;。

它会起作用的。

fa8f6747ce215a8c41c4d5613c6fc385.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值