如何使Gson将整数解析为整数而不是double或float?

时间:2015-03-25 10:47:44

标签: java json gson

我遇到了一个问题,我无法对json字符串的整数进行反序列化。相反,我得到的只是浮点数(或双倍数?),当数字为12时,它应该是一个int,而当12.0时,它应该是浮点数(或双精度数)? Gson没有做到这一点。这是我用Google搜索和获取的内容,但事情仍然相同:

public class TestRedis {
    private static class MyObjectDeserializer implements JsonDeserializer<Object> {

        public Object deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                throws JsonParseException {
            Number num = null;
            try {
                num = NumberFormat.getInstance().parse(json.getAsJsonPrimitive().getAsString());
            } catch (Exception e) {
                //ignore
            }
            if (num == null) {
                return context.deserialize(json, typeOfT);
            } else {
                return num;
            }
        }
    }
    public static void main(String[] argvs){
        Map<String, Object> m = new HashMap<>();
        m.put("a",1);
        m.put("b",2);

        //serilize to json string
        Gson gson = new Gson();
        String s = gson.toJson(m);
        System.out.println(s);

        //deserilize now...
        GsonBuilder builder = new GsonBuilder();
        Gson gson1 = builder.create();
        builder.registerTypeAdapter(Object.class, new MyObjectDeserializer());
        Type type = new TypeToken<Map<String, Object>>(){}.getType();
        Map<String, Object> mm = gson1.fromJson(s,type);
        System.out.println(mm);
    }
}

以上是上述程序的输出:

{"b":2,"a":1}
{b=2.0, a=1.0}

显然gson make将整数误认为是double或float


对于那些可能建议制作结构表示相应值的真实类型的人,我不能,因为我处理的真实类型是Map<String, Object>此地图的值可以是任何类型。

0 个答案:

没有答案