从 JSON 数组中删除 JSON 对象

5

I've a JsonArray like:

"fields" : [
    {
      "name":"First Name",
      "id":1
    },
    {
      "name":"Middle Name",
      "id":2
    },
    {
      "name":"Last Name",
      "id":3
    }
]

我想从上面的JsonArray中删除第二个JsonObject。为此,我编写了以下代码:

JsonArray fieldsObject =jsonObject.getJsonArray("fields");
fieldsObject.remove(fieldsObject.getJsonObject(2));

但第二行代码会抛出错误:java.lang.UnsupportedOperationException

有没有办法从JsonArray中移除JsonObject?


嗨@TDHM,你能检查一下这个链接吗?https://groups.google.com/forum/#!topic/vertx/tTmv-US-HMI ,你正在从一个固定大小的数组中删除数据。你能把JsonArray转换成ArrayList吗? - Ralph Rimorin
你能提供你使用的API吗?即JSONArray的完全限定名称。 - Keerthivasan
4个回答

0

可能你的 JsonElement 或者 JSONArray 是 null。

getJsonObject 返回一个 JSONObject。 remove 方法需要一个 int

UnsupportedOperationException 如果不支持删除操作。

试试这个:

JSONArray fieldsObject =jsonObject.getJsonArray("fields");
fieldsObject.remove(int index);

或者

JSONArray result = new JSONArray();
for(int i=0;i<fieldsObject.length();i++)
{
   if(i!=2)
   {
    result.put(fieldsObject.get(i)); 
   }
}

并将结果分配给原始值

fieldsObject=result;

这也会产生相同的错误:java.lang.UnsupportedOperationException - Alpha

0
  • gson

适用于 gson 库版本 2.3.1 的删除操作

public static void main(String[] args) throws Exception {


    String s = "{ \"fields\" : [ "+
            " {\"name\":\"First Name\",\"id\":1},"+
            "{\"name\":\"Middle Name\",\"id\":2},"+
            "{\"name\":\"Last Name\",\"id\":3}"+
            "]}";

        JsonParser parser = new JsonParser();
        JsonObject json = parser.parse(s).getAsJsonObject();
        System.out.println("original object:"+json);
        JsonArray fieldsObject = json.getAsJsonArray("fields");
        System.out.println("Before removal :"+fieldsObject);
        Object remove = fieldsObject.remove(1);
        System.out.println("After removal :"+fieldsObject);
    }

输出:

   original object:{"fields":[{"name":"First Name","id":1},{"name":"Middle Name","id":2},{"name":"Last Name","id":3}]}
Before removal :[{"name":"First Name","id":1},{"name":"Middle Name","id":2},{"name":"Last Name","id":3}]
After removal :[{"name":"First Name","id":1},{"name":"Last Name","id":3}]
  • org.json

删除 org.json 库中的内容。

public static void main(String[] args) throws Exception {

            String s = "{ \"fields\" : [ "+
            " {\"name\":\"First Name\",\"id\":1},"+
            "{\"name\":\"Middle Name\",\"id\":2},"+
            "{\"name\":\"Last Name\",\"id\":3}"+
            "]}";
            JSONObject json = new JSONObject(s);
            System.out.println("original object:"+json);
            JSONArray fieldsObject =json.getJSONArray("fields");
            System.out.println("Before removal :"+fieldsObject);
            Object remove = fieldsObject.remove(1);
            System.out.println("After removal :"+fieldsObject);
        }

输出:

original object:{"fields":[{"name":"First Name","id":1},{"name":"Middle Name","id":2},{"name":"Last Name","id":3}]}
Before removal :[{"name":"First Name","id":1},{"name":"Middle Name","id":2},{"name":"Last Name","id":3}]
After removal :[{"name":"First Name","id":1},{"name":"Last Name","id":3}]

Sanj,我使用org.json进行了检查,但是JSONArray没有提供remove方法。我正在使用版本20090211。请问您使用的是哪个版本的org.json - Alpha
我正在使用20160212版本。 - Sanj

0

您无法从JsonArray中删除元素,因为它不支持remove()方法:

private static final class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray {

remove()方法的实现来自AbstractList

public E remove(int index) {
    throw new UnsupportedOperationException();
}

为什么不创建一个单独的数据结构数组或列表来保存您想要的对象呢?

顺便说一下,使用 JsonArray 的目的是将 JSON 数据以对象形式加载,因此它支持读取方法,但不支持对加载的数据结构进行修改。


0

我尝试使用Sanj在上面帖子中提到的org.json库。我们可以按以下方式从JSONArray中删除元素。我将json内容放置在.txt文件中,并读入String对象以构建JSONObject。请参考下面的代码。

public class App{    
public static void main(String args[]) throws IOException{    

    BufferedReader br = new BufferedReader(new FileReader("json.txt"));
    String jsonContent = "";
    String jsonLine;
    while((jsonLine=br.readLine())!=null){
        jsonContent+=jsonLine;
    }
    JSONObject jObj = new JSONObject(jsonContent);
    JSONArray jsonArray = jObj.getJSONArray("fields");
    jsonArray.remove(1);
    System.out.println(jsonArray);
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接