是否可以确定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中实现此问题,但是这个问题肯定不是它的重复项。
答案 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)
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都确定为浮点数。