Gson将json字符串转map导致int型被转换成double的采坑之旅 |
您所在的位置:网站首页 › java中将json字符串转换成map › Gson将json字符串转map导致int型被转换成double的采坑之旅 |
前言:日常开发中,与json打交道的机会很多,一般对象json转都不会出现什么问题,但是json转对象就有可能出现问题了,今天就来说说json转map导致int型转换成double的问题 问题重现 之前解决过long型被转化成科学计数法的问题,所有就拿以前的公用方法,一个泛型工具类 public class MyType { public T gsonToMap(String strJson) { return new Gson().fromJson(strJson, new TypeToken() { }.getType()); } } String json = "{\"identifier\":\"18111111111\",\"opType\":1,\"platform\":0}"; Map map = new MyType().gsonToMap(json); 复制代码 直接将需求类型对象传入泛型就好了。 然而事与愿违,int成功的转换成double,1->1.0、0->0.0,如上图所示接下来的操作大家都知道了,借助于网络平台,于是乎找到几种解决方式,细心的我发现有人评论解决他们的问题,看来有戏啊【手动滑稽】 解决方案1、需要gson解析的类型 , 重写他的deserialize方法, 就是将其中json手动解析成map , 不对数据进行处理 public HashMap gsonToMap(String strJson) { Gson gson = new GsonBuilder() .registerTypeAdapter( new TypeToken(){}.getType(), new JsonDeserializer() { @Override public HashMap deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { HashMap hashMap = new HashMap(); JsonObject jsonObject = json.getAsJsonObject(); Set entrySet = jsonObject.entrySet(); for (Map.Entry entry : entrySet) { hashMap.put(entry.getKey(), entry.getValue()); } return hashMap; } }).create(); return gson.fromJson(strJson, new TypeToken() { }.getType()); } 复制代码 经过实践,是可以转化成功,但是本着复用的思想,我把map替换成泛型,然后就不行,一脸蒙蔽;(问题暂时搁置一旁)2、自定义TypeAdapter替代Gson默认的adapter(此处埋下伏笔【偷笑】)解决,自定义TypeAdapter如下: public class MapTypeAd |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |