Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何组合两个JSON对象数组?_Java_Json - Fatal编程技术网

在Java中,如何组合两个JSON对象数组?

在Java中,如何组合两个JSON对象数组?,java,json,Java,Json,我有几个字符串,每个字符串包含一个对象数组的JSON表示。下面是一个代码示例,尽管这不是我的实际代码(传入了JSON字符串): 我需要将这两个JSON数组组合成一个大的JSON数组。我可以将其视为字符串操作问题,并用逗号替换内端方括号,但这并不特别健壮(尽管我保证得到有效的JSON) 我宁愿将这两个字符串作为JSON数组处理,并以某种方式将它们添加到一起。这是一个伟大的计划,除了我不知道“不知怎么”的部分 有人知道Java中的解决方案不需要构建JSON对象的Java对象表示吗 谢谢 您实际上只有

我有几个字符串,每个字符串包含一个对象数组的JSON表示。下面是一个代码示例,尽管这不是我的实际代码(传入了JSON字符串):

我需要将这两个JSON数组组合成一个大的JSON数组。我可以将其视为字符串操作问题,并用逗号替换内端方括号,但这并不特别健壮(尽管我保证得到有效的JSON)

我宁愿将这两个字符串作为JSON数组处理,并以某种方式将它们添加到一起。这是一个伟大的计划,除了我不知道“不知怎么”的部分

有人知道Java中的解决方案不需要构建JSON对象的Java对象表示吗


谢谢

您实际上只有两个选择:解析JSON(总是需要构造对象)或不解析JSON。当然,不解析会更便宜

乍一看,您将其视为字符串操作问题的想法可能听起来很脆弱,但我想得越多,它就越有意义。对于错误检测,您可以通过检查方括号轻松确认您确实在处理数组;在那之后,只要去掉结束括号,加上逗号,去掉开始括号,再加上“尾”就可以完美地工作了。我能想到的唯一例外是,如果其中一个数组是空的,那么只需返回另一个字符串,而不做任何更改;同样,这很容易作为字符串进行检查


我真的不认为有任何理由让它比这更复杂。

此代码将采用
sourceArray
(s2),并将其附加到
destinationArray
(s1)的末尾:

String s1=“[{name:\'Bob\',car:\'Ford\},{name:\'Mary\',car:\'Fiat\'}]”;
字符串s2=“[{name:\'Mack\”,car:\'VW\”},{name:\'Steve\”,car:\'Mercedes-Benz\”}];
JSONArray sourceArray=新的JSONArray(s2);
JSONArray destinationArray=新的JSONArray(s1);
对于(int i=0;i
我将此代码用于合并两个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);

使用下面的方法在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");
}
公共JSONArray getMergeJson(ArrayList xyz){ JSONArray结果=null; JSONObject obj=新的JSONObject(); 对象放置(“键”,结果); 用于(JSONArray tmp:修补程序){
对于(inti=0;i我使用此代码将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;
}
publicjsonarray getMergeJsonArrays(arraylistjsonarrays)抛出JSONException
{
JSONArray mergedjsonarray=新的JSONArray();
用于(JSONArray tmpArray:jsonArrays)
{

对于(int i=0;i,这是我的解决方案,您可能需要合并两个以上的数组:

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(JSONArray…数组){
JSONArray outArray=新的JSONArray();
for(JSONArray数组:数组)
对于(int i=0;i
此函数发挥了神奇的作用,添加多个数组,返回一个包含所有元素的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;
}

我的建议是为此使用一些JSON库,但“不需要构造JSON对象的Java对象表示形式的Java解决方案”会这样做吗是说你不想出于任何原因使用单独的库?不,外部库很好-我确信它们是必要的。我的意思是我不想为JSON数组中的每个对象创建Java对象,也就是说,我不想创建
MyObject MyObject MyObject=new MyObject(name,car)
对于每个对象,然后合并MyObject的数组并将合并后的数组转换回JSON。我想找到一种方法将所有内容都保留在JSON中。因为我保证会得到长度>0的有效JSON数组,所以按照您的建议执行最有意义。谢谢!我认为这种黑客行为是危险的,不应该这样做。api稍后可能会改进以提供更好的方法,但脆弱且未经许可的黑客攻击将比处理器时间浪费更多的人分钟。您当然有权发表您的意见,但我希望听到任何具体的反对意见,而不是诉诸一般原则。鉴于JSON的语法和此问题的参数,错误检查上面提到的ing足以使其变得非常健壮。将其视为sting操纵问题,即使对于中等大小的阵列,其效率也要高出许多数量级,我可以想到在多种情况下,此解决方案更可取。@Sojurn危险如何?我使用了此方法,它对我有效,我d确保检查空json数组和空json数组。什么是“补丁程序”这里,for循环内部?我认为应该是xyz。感谢修复。此代码工作起来很轻松。如果JSON包含方括号而不是用于声明数组的方括号,则上面的代码将中断。请使用
lastIndexOf
而不是
indexOf
,以防止发生这种情况。
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;
}
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;
}