JsonElement是整数还是浮点型?

时间:2018-11-13 15:00:23

标签: java gson

是否可以确定GSON $(document).ready(function() { $("input").change(function() { let red: number; red = $("#red").val(); let green: number; green = $("#green").val(); let blue: number; blue = $("#blue").val(); let color: string = "rgb(" + red + ", " + green + ", " + blue + ")"; $("#myColor").css("background-color", color); }); }); 实例是整数还是浮点数?

我能够确定它是否是数字:

JsonElement

但是如何确定它是整数还是浮点数,以便随后可以使用正确的转换方法?要么

JsonElement value = ...
boolean isNumber = value.getAsJsonPrimitive().isNumber();

float f = value.getAsJsonPrimitive().getAsFloat();

编辑:另一个问题可能会回答为什么可能无法在GSON中实现此问题,但是这个问题肯定不是它的重复项。

3 个答案:

答案 0 :(得分:-1)

使用类似方法,因此,如果return json对象是float或integer的实例,则可以应用所需的get:

JSONObject jObj = new JSONObject(jString);
Object aObj = jObj.get("a");
if(aObj instanceof Integer){
    System.out.println(aObj);
}

答案 1 :(得分:-1)

来自GSON API docs

  

JsonElement类
  ...
  表示Json元素的类。它可以是JsonObject,JsonArray,JsonPrimitive或JsonNull。

,例如:

  

getAsInt()
  获取此元素作为原始整数值的便捷方法。

JsonElement既不是int也不是float。您只需要以某种方式投射到某个对象/基元中获取值的方法。

因此,您最好将问题设置为类似

如何检查JsonElement的值可以构造为int还是构造为float

或类似的东西。

简短的答案:这是可能的,但是您需要自己检查是否可以从价值中构造出您需要的东西,就像其他答案一样。

Gson不知道(当然可以尝试猜测)某些名称在JSON中保存的对象的类型是什么。也可以将DateTime序列化为刻度。

在使用gson.fromJson(...)的情况下,我将注册类型适配器,例如:

JsonDeserializer<Number> numDeserializer = new JsonDeserializer<Number>() {
    @Override
    public Number deserialize(JsonElement json, Type typeOfT
              ,JsonDeserializationContext context) throws JsonParseException {
        try {
            return new Integer(json.getAsString());
        } catch (NumberFormatException nfe) {
            return json.getAsFloat();               
        }
    }
};

,并在我的课程中将其反序列化的对应字段为Number。 或者如果使用JsonParser,则使用类似的try{} catch {}-block或helper方法。

但是,这些当然只是一些用例/可能性。

答案 2 :(得分:-1)

到目前为止,我发现的唯一方法是在字符串上使用正则表达式:

if (value.getAsJsonPrimitive().isNumber()) {
    String num = value.getAsString();
    boolean isFloat = num.matches("[-+]?[0-9]*\\.[0-9]+");
    if (isFloat)
        System.out.println("FLOAT");
    else
        System.out.println("INTEGER");
}

这正确地将123确定为整数,并将123.45和123.0都确定为浮点数。