org.json.JSONArray的remove方法给出了NoSuchMethodError异常

时间:2017-05-26 10:26:48

标签: java json

我正在使用以下导入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;

2 个答案:

答案 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>