[英]Exception casting valid JSON with Java
我有一個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無法強制轉換為java.lang.String
但是對我沒有幫助。
我不明白的是什么?
問題不在解析過程中。 但是在以下線的鑄造過程中:
String s_id = ((String) jsonObject.get("_id"));
jsonObject.get("_id")
返回 - 由錯誤指定 - java.lang.Long
,稍后將其jsonObject.get("_id")
為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")));
使用jsonObject.get("_id")
時,_id的值被正確標識為Long(示例中為-1 jsonObject.get("_id")
。
如果你想要一個String使用jsonObject.getString("_id").
你為什么除了“_id”字段是一個字符串?
它的值為-1(與“-1”相反),因此它實際上是Long而不是String。
但是,如果你需要字符串,你可以通過它來投射它
String s_id = String.valueOf(jsonObject.get("_id"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.