Java 尝试解析JSONArray时的ClassCastException
尝试使用库解析以下JSON字符串时: 我得到一个例外:Java 尝试解析JSONArray时的ClassCastException,java,json,classcastexception,Java,Json,Classcastexception,尝试使用库解析以下JSON字符串时: 我得到一个例外: java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONArray 我就是这样做的: JSONArray json = (JSONArray) new JSONParser().parse(jsonString); JSON字符串是一个数组,因此不确定引发该异常的原因 这里有几个类似的问题,但在他们的例子中
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
,因此抛出异常是有意义的,但在这种情况下,它看起来是正确的
-----------------编辑-----------------
我添加了一行来打印对象的类,如下所示:
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,但它没有打印“这是一个JSONArray”它应该是这样的
Object obj = new JSONParser().parse(jsonString);
JSONArray json = new JSONArray();
json.add(obj);
你说你得到了这个:
java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast
to org.json.simple.JSONArray
请注意,完全限定的类名看起来完全相同。如果该消息被准确地转录,并且名称相同,这意味着您的JVM中加载了两个版本的JSONArray
类
这在JVM中是可能的,在JVM中,应用程序或框架有多个类加载器,并且您已设法在多个类加载器中加载该类。例如,如果您在web容器的共享库目录和webapp的WAR文件中都有JSON库JAR文件,则可能会发生这种情况
问题是类的运行时类型由类FQN和类加载器标识。在不同的类加载器中加载的具有相同FQN的两个类是不同的类型,即使字节码相同。这意味着它们不兼容赋值,这会导致奇怪的(但正确的!)类转换失败
解决方案:
1-另一种非常模糊的解释是,由于“同形文字”,名称看起来相同,但实际上不同。但在这种情况下,我认为我们可以认为这种解释是不可信的。可能重复的请解释否决票,标记为重复的问题是不同的,我的问题是针对一种奇怪的情况提出的,在这种情况下,显然无法将JSON数组强制转换为JSONArray对象将其解析为
JSONObject
,然后使用instanceof
@cj1检查它是否为JSONArray
。请查看我的编辑此错误在尝试解析时没有发生。解析成功。转换不正确。结果相同,它在第二行中引发异常。如果您确定输入与您提供的完全相同,请检查编辑的答案。如果它有效,请upvoteI我想可能就是这样,看起来应用程序中还有其他地方加载了库jar,我将调查此路径并更新问题是的,这解决了问题,库加载在两个不同的地方,所以我只是删除了其中一个jar,以确认我还打印了json.getClass().getClassLoader()
它们是不同的,谢谢!
java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast
to org.json.simple.JSONArray