0

我的 Java 程序将 JSON 字符串作为参数并对其进行解析。我正在使用 json-simple 解析器。这是它的链接。我正在尝试将以下 JSON 字符串作为参数传递给程序。

{
  "obj":"timeout" , 
  "valInMs":15000
}

我正在尝试获取 "valInMs" 的值。以下是执行此操作的 java 代码

JSONParser parser = new JSONParser();
JSONObject jsonObj;
jsonObj = (JSONObject) parser.parse(jsonString);
Integer timeout = (Integer) paramJson.get("valInMs");

上面的代码引发java.lang.ClassCastExceptionjava.lang.Long不能强制转换为java.lang.Integer.

我试图了解程序在遇到 JSON 数字值时应该期待什么。无法通过查看 JSON 对象来确定“类型”。

java程序应该如何处理这个?

形成json.org似乎 Json “值”(在许多其他的东西中)可以是 “数字”。“数字”可以是以下之一:

number
 - int
 - int frac
 - int exp
 - int frac exp
4

2 回答 2

1
Number timeoutNum = (Number) paramJson.get("valInMs");
Long timeoutLong = null;
Double timeoutDouble = null;
if (timeoutNum instanceof Long) {
    timeoutLong = (Long) timeoutNum;
}
else if (timeoutNum instanceof Double) {
    timeoutDouble = (Double) timeoutNum;
}
else { ... punt ... }

或者可以使用intValue()et al on timeoutNum,如有必要,在整数和浮点数之间进行强制转换。

于 2014-10-02T18:25:28.763 回答
0
// This works for me

if (jobj.get("valInMs") != null)
{
    Number val = (Number) jobj.get("valInMs");
    int valInMs = val.intValue();
}
else
    valInMs = 0;
于 2015-08-13T11:36:55.363 回答