簡體   English   中英

在 Java 中,如何組合兩個 JSON 對象數組?

[英]In Java, how can I combine two JSON arrays of objects?

我有幾個字符串,每個字符串都包含一個對象數組的 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 數組。 我可以將其視為字符串操作問題並用逗號替換內端方括號,但這並不是特別健壯(盡管我保證得到有效的 JSON)。

我寧願將這兩個字符串視為 JSON 數組,然后以某種方式將它們加在一起。 這是一個很棒的計划,除了我不知道“不知何故”部分。

有誰知道不需要構建 JSON 對象的 Java 對象表示的 Java 解決方案?

謝謝!

此代碼將獲取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();

您實際上只有兩個選擇:解析 JSON(這總是會涉及構造對象)或不解析 JSON。 當然,不解析會更便宜。

乍一看,您將其視為字符串操作問題的想法可能聽起來很脆弱,但我越想它,它似乎就越有意義。 對於錯誤檢測,您可以通過檢查方括號輕松確認您確實在處理數組; 之后,只需去掉結尾括號,添加逗號,去掉開頭括號,然后添加“尾巴”就可以完美地工作。 我能想到的唯一例外是,如果任一數組為空,則應將另一個字符串原樣返回; 同樣,這很容易作為字符串進行檢查。

我真的不認為有任何理由讓它比這更復雜。

我將此代碼用於合並兩個 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);

這是我的解決方案,您可能想要合並兩個以上的數組:

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;
}

我使用此代碼將 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;
}

這個函數很神奇,添加多個數組,返回一個包含所有元素的 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;
}

使用Below Method傳遞ArrayList中的所有JSON數組,此方法將返回累積的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");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM