错误信息
java.lang.NoSuchMethodError:org.json.JSONArray.isEmpty()Z
我的场景
我尝试使用org.json
的JSONArray
方法。
我使用IntelliJ作为IDE。我没有在代码中使用任何接近反射的东西。我声明了一个JSONArray
,并在几行之后试图检查它是否为空,但是当我试图使用isEmpty()
时,我得到了这个错误。
我确实通过使用jsonArray.length() > 0
解决了这个问题,但是错误消息让我着迷。我查看了JSONArray的反编译的**.class文件,方法isEmpty()
exists,并且有一个public access修饰符**。但是,InteliiJ建议我在键入代码时可以使用isEmpty()
。那么,是什么原因导致了这个错误的发生呢?
代码示例
JSONArray filesJsonArray = new JSONArray();
JSONObject fileObject = new JSONObject();
fileObject.put("fileId",fileId);
fileObject.put("fileName",fileName);
fileObject.put("mimeType",mimeType);
filesJsonArray.put(fileObject);
if (!filesJsonArray.isEmpty()){ //the condition check here throws the error.
}
(为简洁起见,省略了捕获块)
我的导入
在我使用这段代码的课程中,这是我所有的导入
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.ByteBuffer;
import java.sql.*;
import java.util.Base64;
6条答案
按热度按时间kcrjzv8t1#
如果你使用的是 Spring Boot ,那么你可以试试这个:
它为我工作。
zaqlnxep2#
对于任何仍然在看这个的人来说,主要的问题是JSONAssert。
要确认,请使用您拥有的任何依赖关系图工具来验证JSONAssert是否正在添加“android-json”。
maven示例:
android-json提供了自己的org.json.* 对象实现,但这些实现并不是最新的。因此将它们作为JSONAssert依赖项排除。
maven示例:
这应该可以保存您从这个问题,同时让您使用伟大的输出JSONAssert!
mklgxw1f3#
你需要从 spring-boot-starter-test artifactId 中清理 org.json 依赖包,这里是如何清理任何依赖的(考虑到我使用的是 spring-boot-starter-parent 2.4.4)
cngwdvgl4#
我相信你在你的项目中
因为你好像混淆了两类人:
org.json.JSONArray
与org.json.simple.JSONArray
。第一个没有这种方法,第二个有。下面是这两个类的代码示例:https://www.programcreek.com/java-api-examples/org.json.JSONArray
https://www.programcreek.com/java-api-examples/org.json.simple.JSONArray
因此,作为一个解决方案,我建议清理和重建项目。
vzgqcmou5#
在我添加到我的项目后,我得到了同样的错误:
在那之后,我清理和更新了依赖关系,
就不见了
bxfogqkk6#
我知道这是旧的,但张贴在情况下,这可能是有用的人。
下面是我更新的依赖项
在我的例子中,使用了
android-json
中的JSONArray
,而不是org.json.JSONArray
,后者具有spliterator()
抛出Caused by: java.lang.NoSuchMethodError: org.json.JSONArray.spliterator()Ljava/util/Spliterator;
下面是抛出的代码
而且,我不能排除
org.skyscreamer.jsonassert
,因为它正被andExpect(content().json(getJsonBody()))
调用的assertJSONEqual()
使用这里是代码
}