解决gson解析时将数字类型(int、double、float、long等)全部转为double的问题 您所在的位置:网站首页 double类型解析 解决gson解析时将数字类型(int、double、float、long等)全部转为double的问题

解决gson解析时将数字类型(int、double、float、long等)全部转为double的问题

2023-03-15 20:10| 来源: 网络整理| 查看: 265

当使用gson将对应的json字符串里面的某一个字段转为Object时,将json字符串里面的内容,转为了对应的非Object类型的数字类型(不全是double的情况),但是如果某一个字段转为Object时,Object里面的所有数字字段还都是转为了double

这种情况的解决方法便是:将Object便为一个Map去进行解析,便不会出现这种情况了

这里通过一种不同于我之前写的博客的方法,也是自己去定义一种解析方法,如下

import com.google.gson.TypeAdapter; import com.google.gson.internal.LinkedTreeMap; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; public class DataTypeAdapter extends TypeAdapter { @Override public Object read(JsonReader in) throws IOException { JsonToken token = in.peek(); switch (token) { case BEGIN_ARRAY: List list = new ArrayList(); in.beginArray(); while (in.hasNext()) { list.add(read(in)); } in.endArray(); return list; case BEGIN_OBJECT: Map map = new LinkedTreeMap(); in.beginObject(); while (in.hasNext()) { map.put(in.nextName(), read(in)); } in.endObject(); return map; case STRING: return in.nextString(); case NUMBER: //改写数字的处理逻辑,将数字值分为整型与浮点型。 double dbNum = in.nextDouble(); // 数字超过long的最大值,返回浮点类型 if (dbNum > Long.MAX_VALUE) { return dbNum; } // 判断数字是否为整数值 long lngNum = (long) dbNum; if (dbNum == lngNum) { try { return (int) lngNum; } catch (Exception e) { return lngNum; } } else { return dbNum; } case BOOLEAN: return in.nextBoolean(); case NULL: in.nextNull(); return null; default: throw new IllegalStateException(); } } @Override public void write(JsonWriter out, Object value) { } }

调用示例

GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new DateTypeAdapter()); Gson gson = builder.create(); String msg = gson.toJson(notificationInfo); gson 版权说明

本文地址:https://www.keleyanyi.com/?post=284未标注转载均为本站远程,转载请注明文章出处:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有