Java 在不使用JSONObject的情况下,检查下一个标记的类型是double、long还是int

Java 在不使用JSONObject的情况下,检查下一个标记的类型是double、long还是int,java,android,json,Java,Android,Json,我需要使用JsonReader从HttpURLConnection读取JSON响应。为了找出下一个标记的类型,我使用了方法,该方法返回一个。但是,我必须区分下一个令牌是Javadouble、long还是int,这样我就可以使用JsonReader.next*()方法获取令牌,因为如果下一个令牌是Javadouble、long或int,则返回NUMBER。以下是我的代码: final Map<String, Object> results = new HashMap<>()

我需要使用
JsonReader
HttpURLConnection
读取JSON响应。为了找出下一个标记的类型,我使用了方法,该方法返回一个。但是,我必须区分下一个令牌是Java
double
long
还是
int
,这样我就可以使用
JsonReader.next*()
方法获取令牌,因为如果下一个令牌是Java
double
long
int
,则返回
NUMBER
。以下是我的代码:

final Map<String, Object> results = new HashMap<>();

while (jsonReader.hasNext()) {
    final String name = jsonReader.nextName();

    switch (jsonReader.peek()) {
        case BOOLEAN:
            results.put(name, jsonReader.nextBoolean());
            break;
        case NAME:
            results.put(name, jsonReader.nextName());
            break;
        case NULL:
            results.put(name, null);
            break;
        case NUMBER:
            // results.put(name, jsonReader.nextInt()); TODO: Find out how to differentiate between int, long and double
            break;
        case STRING:
            results.put(name, jsonReader.nextString());
            break;
        default:
            jsonReader.skipValue();
            break;
    }
}
final Map results=new HashMap();
while(jsonReader.hasNext()){
最终字符串名称=jsonReader.nextName();
开关(jsonReader.peek()){
大小写布尔值:
results.put(名称,jsonReader.nextBoolean());
打破
案例名称:
results.put(name,jsonReader.nextName());
打破
大小写为空:
results.put(name,null);
打破
案件编号:
//results.put(name,jsonReader.nextInt());TODO:了解如何区分int、long和double
打破
大小写字符串:
put(name,jsonReader.nextString());
打破
违约:
jsonReader.skipValue();
打破
}
}

在不使用JSONObject的情况下,是否仍要检查下一个标记的类型是double、long还是int?

您可以使用
nextString()
将下一个数字作为字符串读取,并且
JsonReader
将返回它而不会失败。然后,您可以根据此字符串是否包含

long
double
之间进行选择?在try/catch块中?对象o=jsonReader.peek();如果(o instanceof JSONObject){//do things}@VaibhavKadam您不能,
o instanceof JSONObject
总是false@marshmallow对象o=jsonReader.peek();如果(o instanceof Double){//do things},使用Double几乎可以100%避免这个问题。为什么?int和long是同一种类型,long也可以存储更大的数字,因此可以忽略int。虽然并非所有long都适合于double,但小于2^52的任何值都会完全适合,这几乎总是足够好的。