Gson. Deserialize integers as integers and not as doubles

后端 未结 7 1136
我寻月下人不归
我寻月下人不归 2020-12-09 16:46

I have json object with arbitary values inside. And I want to deserialize it in a Map. Everything is ok except converting integers to a doubles. See example:



        
7条回答
  •  渐次进展
    2020-12-09 17:41

    It's my code

    private static class MapDeserializer implements JsonDeserializer> {
        public Map deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)  throws JsonParseException {
            Map m  = new LinkedHashMap();
            JsonObject jo = json.getAsJsonObject();
            for (Entry  mx : jo.entrySet()){
                String key = mx.getKey();
                JsonElement v = mx.getValue();
                if(v.isJsonArray()){
                    m.put(key, g.fromJson(v, List.class));
                }else if(v.isJsonPrimitive()){
                     Number num = null;
                      try {
                          num = NumberFormat.getInstance().parse(v.getAsString());
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                    m.put(key,num);
                }else if(v.isJsonObject()){
                    m.put(key,g.fromJson(v, Map.class));    
                }
    
            }
          return m;
       }
    }
    
    private static class ListDeserializer implements JsonDeserializer> {
        public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)  throws JsonParseException {
            List m  = new ArrayList();
            JsonArray arr = json.getAsJsonArray();
            for (JsonElement jsonElement : arr) {
                if(jsonElement.isJsonObject()){
                    m.add(g.fromJson(jsonElement, Map.class));
                }else if(jsonElement.isJsonArray()){
                    m.add(g.fromJson(jsonElement, List.class));
                }else if(jsonElement.isJsonPrimitive()){
                    Number num = null;
                    try {
                      num = NumberFormat.getInstance().parse(jsonElement.getAsString());
                    } catch (Exception e) {
                    }
                    m.add(num);
                }
            }
          return m;
       }
    }
    
    private static Gson g = new GsonBuilder().registerTypeAdapter(Map.class, new MapDeserializer()).registerTypeAdapter(List.class, new ListDeserializer()).setDateFormat("yyyy-MM-dd HH:mm:ss").serializeNulls().create();
    
        

    提交回复
    热议问题