我正在使用以下导入org.json.JSONArray
String name = "manjeet";
if (jsonArray.getJSONObject(i).get("name").equals(name))
{
jsonArray.remove(i);
}
如果我在类中从main调用此代码它工作正常但是当我从UI调用它时它表现不同。
它可以进入,但在执行时.remove(i)它正在给予
com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The exception contained within MappableContainerException could not
be mapped to a response, re-throwing to the HTTP container
java.lang.NoSuchMethodError: org.json.JSONArray.remove(I)Ljava/lang/Object;
答案 0 :(得分:0)
要从jsonArray
中删除特定元素,您必须创建Arraylist
并将所需的值存储在jsonArray中。
您可以像下面这样实现:
String name = "manjeet";
ArrayList<String> final_list = new ArrayList<>();
if (! jsonArray.getJSONObject(i).get("name").equals(name))
{
final_list.add(i);
}
// now you can use the final_list instead of using jsonArray.
请注意!
中的if condition
。
答案 1 :(得分:0)
问题: jar冲突
有时可能会发生同一个类由多个jar提供。
在我的情况下,org.json.JSONArray也存在于'jackson-datatype-json-org'中,但是该类的版本较旧,其中remove方法不可用。
由于这个'remove'方法在编译时或从main运行相同的代码时是可用的,但是当我从UI运行它时它从'jackson-datatype-json-org'中选择了类。 / p>
这就是我得到java.lang.NoSuchMethodError异常的原因。
解决方案:我们可以在依赖项中使用排除标记('jackson-datatype-json-org')来删除我们不想使用的类。
示例:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-json-org</artifactId>
<version>2.8.8</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.bundles</groupId>
<artifactId>json</artifactId>
</exclusion>
</exclusions>
</dependency>