![](/img/trans.png)
[英]Empty JSON response when trying to parse JSONObject with one JSONArray
[英]ClassCastException when trying to parse a JSONArray
嘗試使用json.simple庫解析以下JSON字符串時:
[
{"id" : "6d7662a9.f8ba04"},
{"id" : "2da98cc2.145ba4"},
{"id" : "45492640.a17d68"}
]
我得到這個例外:
java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONArray
這就是我的做法:
JSONArray json = (JSONArray) new JSONParser().parse(jsonString);
JSON字符串是一個數組,因此不確定為什么會引發該異常。
這里有幾個類似的問題,但是在他們的情況下,他們試圖將JSONObject
轉換為JSONArray
因此拋出異常是有意義的,但在這種情況下,它看起來是正確的。
----------------- ----------------- EDITS
我添加了一行來打印對象的類,如下所示:
Object json = new JSONParser().parse(jsonString);
System.out.println(json.getClass());
打印以下行:
class org.json.simple.JSONArray
在下一行中,如果出現以下情況,則顯示為:
if(json instanceof JSONArray) {
System.out.println("This is a JSONArray");
}
但是它不訪問if,所以它真的很奇怪,因為首先我檢查對象是否為JSONArray,但是它不打印"This is a JSONArray"
您說您得到此:
java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast
to org.json.simple.JSONArray
請注意,完全限定的類名看起來相同。 如果該消息是准確的轉錄,名稱是相同的1,這意味着你有兩個版本JSONArray
加載到JVM類!
在JVM中,應用程序或框架具有多個類加載器,並且您已經設法在多個類加載器中加載了類,這是可能的。 例如,如果您在Web容器的共享庫目錄中同時在Webapp的WAR文件中同時擁有JSON庫JAR文件,則可能會發生這種情況。
事實是,類的運行時類型由類FQN和類加載器標識。 即使字節碼相同,在不同的類加載器中加載的具有相同FQN的兩個類也屬於不同類型。 這意味着它們與分配不兼容,並且會導致奇怪的(但正確的!)類強制轉換失敗。
解:
1-一個真正晦澀的替代解釋是,由於“象形文字”,這些名稱看起來相同,但實際上卻不同。 但是在這種情況下,我認為我們可以不合理地解釋這種解釋。
應該像
Object obj = new JSONParser().parse(jsonString);
JSONArray json = new JSONArray();
json.add(obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.