簡體   English   中英

使用Java生成有效JSON的異常

[英]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")));

您必須使用.toString()方法將Long轉換為String。

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

參考

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

另外,其原因println輸出在控制台的值是因為PrintStream.println具有重載需要Object ,然后調用其toString方法。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM