使用Gson将Object转String出现\u003d 的原因

情况:

​​​​​​​​​​​​​​
跟后台交互的时候,发现传过去的数据中有个 \u003d
这是我传的参数 :

query=[{property:"chengShi.id",operator:"=",value:1}]

这是后台接收到的参数:

query=[{"property":"chengShi.id","value":1,"operator":"\u003d"}]

很明显,是 = 出错了,因为要传的是对象,我把它封装在Map中了,再用Gson转换,这是我的代码:

Map query = new HashMap();
        query.put("property", "shangPinDM");
        query.put("operator", "=");
        query.put("value", id);
OkHttpGo.<String>post(API.CHECK_PRODUCT)
                .params("query", "[" + MyJson.toJson(query) + "]")
                .execute(new DialogCallback<String>(this).......

​​​​​​​​​

注意这段代码 MyJson.toJson(query),MyJson中封装的是Gson。所以问题就出在Gson转换过程中。

原因:

​​​​​​​Gson默认是进行HTML ESCAPE,也就是转码, 比如我们 \t 表示换行符。因此对象中有=时,Gson就会把=转码,而 = 转码就是 \u003d 。如下图,使用站长之家的在线转换工具可以看到 = 转成Unicode编码之后就是 \u003d

解决

既然Gson默认会进行HTML ESCAPE(转码),我们设置不让Gson转码就可以了,具体代码如下:

  // 创建一个不进行HtmlEscaping的Gson对象
  Gson gson = new GsonBuilder().disableHtmlEscaping().create();
  String json = gson.toJson(query);

原文地址​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值