[英]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.