我有一个 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
但是对我没有帮助。
我不理解什么?
答案 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")));
返回表示此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"));