java - 递归合并 JSON 结构

标签 java json

我有 n 组 json 字符串。我如何在 Java 中将它们合并为一个?

如果有冲突,最新的json会覆盖之前的信息。数组不合并。

例子

json 基础:

{
    "plank" : {
        "count" : 2,
        "properties" : {
            "type" : "oak",
            "dimensions" : [5.0, 25, 25]
        }
    }
}

合并为:

{
    "plank" : {
        "count" : 4,
        "properties" : {
            "dimensions" : [5.0, 12.5, 25]
        }
    },
    "scrap" : {
        "count" : 1,
    }
}

成为:

{
    "plank" : {
        "count" : 4,
        "properties" : {
            "type" : "oak",
            "dimensions" : [5.0, 12.5, 25]
        }
    },
    "scrap" : {
        "count" : 1,
    }
}

最佳答案

我最终采用了一种递归合并 JSON 的方法。

public JSONObject merge(List<JSONObject> objects) {
    for (int i = 0, j = 1; i < objects.size() - 1; i++, j++) {
        merge(objects.get(i), objects.get(j));
    }
    return objects.get(objects.size() - 1);
}


private void merge(JSONObject j1, JSONObject j2) {
    Iterator<String> keys = j1.keys();
    Object obj1, obj2;
    while (keys.hasNext()) {
        String next = keys.next();
        if (j1.isNull(next)) continue;
        obj1 = j1.get(next);
        if (!j2.has(next)) j2.putOpt(next, obj1);
        obj2 = j2.get(next);
        if (obj1 instanceof JSONObject && obj2 instanceof JSONObject) {
            merge((JSONObject) obj1, (JSONObject) obj2);
        }
    }
}

关于java - 递归合并 JSON 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975842/

相关文章:

java - 整个代码中未正确使用数据库连接池

Java - 从字节到字符的可能有损转换

java - 两幅图像之间的碰撞检测

java - 我怎样才能让 Gson 使用访问器而不是字段?

android - 使用api的Android和jsonParsing不起作用

java - 如何将数组列表左移 2 个位置?

java - 在java中制作一个用于对多个值进行分组的模型

json - 通过 JSON 对象的 POST 请求

javascript - 对表值进行分组并将其他值相加

PHP mysql代码帮助解码