GSON转换成Map时,Long型变为科学计数法

问题场景

在我需要将一个对象转为Map类型时,调用Gson.fromJson发现,原来对象中的Long类型的主键等字段,被解析成了科学计数法,导致后续的解析出错。

解决方案

一、继续使用GSON

将gson对Long数据序列化的方式修改为字符串

public static void main(String[] args) {
        Gson compareGson = new Gson();
        Gson testGson = new GsonBuilder()
                .setLongSerializationPolicy(LongSerializationPolicy.STRING) // 将DEFAULT改为STRING
                .serializeNulls().create();
        Map<String, Object> map = new HashMap<>();
        map.put("id", 171211111112112221L);
        String compareGsonString = compareGson.toJson(map);
        String testGsonString = testGson.toJson(map);
        System.out.println("compareGsonString = " + compareGsonString);
        System.out.println("testGsonString = " + testGsonString);
        Map<String, Object> compareMap = compareGson.fromJson(compareGsonString, new TypeToken<Map<String, Object>>() {
        }.getType());
        Map<String, Object> testMap = testGson.fromJson(testGsonString, new TypeToken<Map<String, Object>>() {
        }.getType());
        System.out.println("compareMap = " + compareMap);
        System.out.println("testMap = " + testMap);
    }

打印:

compareGsonString = {"id":171211111112112221}
testGsonString = {"id":"171211111112112221"}
compareMap = {id=1.71211111112112224E17}
testMap = {id=171211111112112221}

二、使用其他序列化工具

JSONObject

三、其他问题

当gson / JSON对 时间类型DATE进行反序列化时,需要自己重写反序列化逻辑

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容