首页 > 解决方案 > 如何合并两个 JsonArray?

问题描述

我为同一个问题找到的所有答案都涉及org.json.JSONArray. 我需要javax.json.JsonArray的解决方案。

我有两个 JSON 数组,当我尝试将它们与我合并时,array1.addAll(array2)我得到一个java.lang.UnsupportedOperationException.

...
JsonObject users = getUsers(searchBase, filter, (String[]) null);
...
final JsonObject guests = getUsers(searchBase, filter, (String[]) null);

users.getJsonArray("Resources").addAll(guests.getJsonArray("Resources"));
...

JsonObjects我回来的(用户和客人)都有这种形式:

{
    "startIndex": 1,
    "totalResults": 7,
    "itemsPerPage": 7,
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "Resources": [
        {
            "attr1": "value1",
            "attr2": "value2",
            "attr3": "value3",
            "attr4": "value4",
        },
        {
            "attr1": "value5",
            "attr2": "value6",
            "attr3": "value7",
            "attr4": "value8",
        },
        ...
    ]
}

为什么我会收到此错误?

那我该怎么做才能合并它们呢?

编辑:正确答案是 tonakai 之一。不幸的是,这是一条评论,我无法将其设置为已接受的答案。

标签: javaarraysjson

解决方案


我猜你正在寻找JsonArrayBuilder.

以下代码对我有用:

import java.io.*;
import javax.json.*;

public class Test {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        InputStream fileInputStream = new FileInputStream("ABSOLUTE_PATH_TO_FILE\\jsonData.json");
        JsonReader jsonReader = Json.createReader(fileInputStream);
        JsonObject jsonObject = jsonReader.readObject();

        JsonArrayBuilder users = Json.createArrayBuilder(jsonObject.getJsonArray("Resources"));
        JsonArrayBuilder guests = Json.createArrayBuilder(jsonObject.getJsonArray("Resources"));

        users.addAll(guests);
        
        System.out.println(users.build());

        jsonReader.close();
        fileInputStream.close();
    }
}

我在这里使用的文件是根据您在问题中提供的 JSON 创建的:

{
   "startIndex":1,
   "totalResults":7,
   "itemsPerPage":7,
   "schemas":[
      "urn:ietf:params:scim:api:messages:2.0:ListResponse"
   ],
   "Resources":[
      {
         "attr1":"value1",
         "attr2":"value2",
         "attr3":"value3",
         "attr4":"value4"
      },
      {
         "attr1":"value5",
         "attr2":"value6",
         "attr3":"value7",
         "attr4":"value8"
      }
   ]
}

推荐阅读