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 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 compareMap = compareGson.fromJson(compareGsonString, new TypeToken>() {
        }.getType());
        Map testMap = testGson.fromJson(testGsonString, new TypeToken>() {
        }.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进行反序列化时,需要自己重写反序列化逻辑

你可能感兴趣的:(GSON转换成Map时,Long型变为科学计数法)