Подтвердить что ты не робот

В Java, как я могу объединить два массива JSON объектов?

У меня есть несколько строк, каждая из которых содержит представление JSON массива объектов. Вот пример кода, чтобы проиллюстрировать это, хотя это не мой фактический код (строки JSON передаются):

String s1 = "[{name: "Bob", car: "Ford"},{name: "Mary", car: "Fiat"}]";
String s2 = "[{name: "Mack", car: "VW"},{name: "Steve", car: "Mercedes Benz"}]";

Мне нужно объединить эти два массива JSON в один большой массив JSON. Я мог бы рассматривать это как проблему манипуляции с String и заменять внутренние квадратные скобки запятыми, но это не особенно надежное (хотя я гарантированно получил бы действительный JSON).

Я предпочел бы рассматривать эти две строки как массивы JSON и как-то добавлять их вместе. Это отличный план, за исключением того, что я не знаю части "как-то".

Кто-нибудь знает решение на Java, которое не требует создания объектов Java Object объектов JSON?

Спасибо!

4b9b3361

Ответ 1

У вас действительно есть только два варианта: проанализируйте JSON (который обязательно будет включать в себя создание объектов) или не разобрать JSON. Разумеется, разбор не будет дешевле.

На первый взгляд ваша идея о том, чтобы рассматривать его как проблему с манипулированием строкой, может показаться хрупкой, но чем больше я думаю об этом, тем больше кажется, что это имеет смысл. Для обнаружения ошибок вы можете легко подтвердить, что действительно имеете дело с массивами, проверяя квадратные скобки; после этого просто сбрасывая конечную скобку, добавляя запятую, снимая начальную скобку, и добавление "хвоста" должно работать безупречно. Единственное исключение, о котором я могу думать, это если какой-либо массив пуст, вы должны просто вернуть другой String без изменений; опять же, что очень легко проверить как строку.

Я действительно не думаю, что есть какая-то причина сделать его более сложным, чем это.

Ответ 2

Этот код примет sourceArray (s2) и добавит его в конец destinationArray (s1):

String s1 = "[{name: \"Bob\", car: \"Ford\"},{name: \"Mary\", car: \"Fiat\"}]";
String s2 = "[{name: \"Mack\", car: \"VW\"},{name: \"Steve\", car: \"Mercedes Benz\"}]";

JSONArray sourceArray = new JSONArray(s2);
JSONArray destinationArray = new JSONArray(s1);

for (int i = 0; i < sourceArray.length(); i++) {
    destinationArray.put(sourceArray.getJSONObject(i));
}

String s3 = destinationArray.toString();

Ответ 3

Я использовал этот код для объединения двух массивов Json.

String s1 = "[{name: \"Bob\", car: \"Ford\"},{name: \"Mary\", car: \"Fiat\"}]";
String s2 = "[{name: \"Mack\", car: \"VW\"},{name: \"Steve\", car: \"Mercedes Benz\"}]";
String s3=new String("");
s1=s1.substring(s1.indexOf("[")+1, s1.lastIndexOf("]"));
s2=s2.substring(s2.indexOf("[")+1, s2.lastIndexOf("]"));
s3="["+s1+","+s2+"]";
System.out.println(s3);

Ответ 4

Использовать метод "Следующий метод" передать весь массив JSON в ArrayList, этот метод вернет кумулятивный JsonArray

public JSONArray getMergeJson(ArrayList<JSONArray> xyz){
    JSONArray result=null;
    JSONObject obj= new JSONObject();
    obj.put("key",result);
    for(JSONArray tmp:patches){
        for(int i=0;i<tmp.length();i++){
         obj.append("key", tmp.getJSONObject(i));   ;
        }

            }
    return obj.getJSONArray("key");
}

Ответ 5

Я использую этот код для добавления всех элементов jsonArray к общему JsonArray.

public JSONArray getMergeJsonArrays(ArrayList<JSONArray> jsonArrays) throws JSONException
{
    JSONArray MergedJsonArrays= new JSONArray();
     for(JSONArray tmpArray:jsonArrays)
     {
        for(int i=0;i<tmpArray.length();i++)
        {
            MergedJsonArrays.put(tmpArray.get(i));
        }
     }
    return MergedJsonArrays;
}

Ответ 6

И вот мое решение: вы можете объединить более двух массивов:

public static JSONArray mergeMultiJsonArray(JSONArray... arrays) {
    JSONArray outArray = new JSONArray();
    for (JSONArray array : arrays)
        for (int i = 0; i < array.length(); i++)
            outArray.put(array.optJSONObject(i));
    return outArray;
}

Ответ 7

Эта функция делает волшебство, добавляя массивы кратных значений, возвращая один JSONArray со всеми элементами

public static JSONArray JoinArrays(JSONArray... jsonArrays) {
    JSONArray resultJSONArray = new JSONArray();
    Arrays.stream(jsonArrays).forEach(jsonArray -> IntStream.range(0, jsonArray.length()).mapToObj(jsonArray::get).forEach(resultJSONArray::put));
    return resultJSONArray;
}