美文网首页
GSON转换成Map时,Long型变为科学计数法

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

作者: JavaM | 来源:发表于2023-11-13 09:30 被阅读0次

    问题场景

    在我需要将一个对象转为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进行反序列化时,需要自己重写反序列化逻辑

    相关文章

      网友评论

          本文标题:GSON转换成Map时,Long型变为科学计数法

          本文链接:https://www.haomeiwen.com/subject/biarwdtx.html