使用Java生成有效JSON的异常

时间:2015-05-29 16:14:47

标签: java json exception

我有一个 JSON字符串

{
    "_id": -1,
    "create_date": 0,
    "update_date": 0,
    "description": "test",
    "active": true
}

在Java中,我尝试使用 org.json.simple.parser.JSONParser 解析它:

JSONParser jsonParser = new JSONParser();
org.json.simple.JSONObject jsonObject = (org.json.simple.JSONObject) jsonParser.parse(phoneJSON);

我尝试检索_id字段值:

String s_id = ((String) jsonObject.get("_id"));

但遇到以下异常:

java.lang.Long cannot be cast to java.lang.String

此外,如果我在控制台中显示字段值:

System.out.println("print value -  _id: "+jsonObject.get("_id"));

我明白了:

print value -  _id: -1

在控制台中输出。

我看过这篇文章:

java.lang.Long cannot be cast to java.lang.String

但是对我没有帮助。

我不理解什么?

4 个答案:

答案 0 :(得分:2)

问题不在解析过程中。但是在以下线的铸造过程中:

String s_id = ((String) jsonObject.get("_id"));

jsonObject.get("_id")返回 - 由错误指定 - java.lang.Long,然后您将其转换为String

您可以解决此问题,例如:

String s_id = jsonObject.get("_id").toString();

在Java中,(String) 不是转化,而是转发。由于String不是Long的子类,因此会出错。但是,您可以致电.toString(),以便在文字表示中转换Long

原因:

System.out.println("print value -  _id: "+jsonObject.get("_id"));

作品是因为如果你"添加"字符串的对象,自动调用toString方法。隐含地你写了:

System.out.println("print value -  _id: "+Objects.toString(jsonObject.get("_id")));

答案 1 :(得分:2)

您必须使用.toString()方法将Long转换为String。

String strLong = Long.toString(jsonObject.get("_id")));

Reference

  

返回表示此Long值的String对象。

另外,println输出控制台中值的原因是因为PrintStream.println的重载为takes Object,然后调用其toString方法

答案 2 :(得分:1)

当您使用jsonObject.get("_id")时,_id的值被正确识别为Long(示例中为-1)。

如果您想使用字符串jsonObject.getString("_id").

答案 3 :(得分:1)

为什么你除了" _id"字段是一个字符串?

它的值是-1(与" -1"相反),所以它实际上是一个Long而不是String。

但是,如果您需要字符串,可以通过

进行投射
String s_id = String.valueOf(jsonObject.get("_id"));