如何使用javax中另一个Json(合并Json)的新内容更新Json?

如何使用javax中另一个Json(合并Json)的新内容更新Json?,java,json,Java,Json,我需要比较两个Json:旧的和新的。但我只需要用新json中的新内容更新旧json。例如: oldJson.json: [ { “缩略图”:“1” }, { “缩略图”:“2” } ] newJson.json: [ { “缩略图”:“1” }, { “缩略图”:“2” }, { “缩略图”:“3” } ] oldJson.json的预期结果: [ { “缩略图”:“1” }, { “缩略图”:“2” }, { “缩略图”:“3” } ] 我应该如何处理这个问题?因为Json是JsonAr

我需要比较两个Json:旧的和新的。但我只需要用新json中的新内容更新旧json。例如:

oldJson.json:

[
{
“缩略图”:“1”
},
{
“缩略图”:“2”
}
]
newJson.json:

[
{
“缩略图”:“1”
},
{
“缩略图”:“2”
},
{
“缩略图”:“3”
}
]
oldJson.json
的预期结果:

[
{
“缩略图”:“1”
},
{
“缩略图”:“2”
},
{
“缩略图”:“3”
}
]

我应该如何处理这个问题?

因为Json是
JsonArray
,所以需要
Json.createDiff(source.asJsonArray(),target.asJsonArray())
,而不是
Json.createDiff(source.asJsonObject(),target.asJsonObject())

有关更多详细信息,请参见代码中的注释

另请浏览

import java.io.IOException;
导入java.io.StringReader;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入javax.json.json;
导入javax.json.JsonArrayBuilder;
导入javax.json.JsonPatch;
导入javax.json.JsonValue;
公共类应用程序{
公共静态void main(字符串[]args)引发IOException{
Path oldJsonPath=Path.get(“./oldJson.json”);
Path newJsonPath=Path.get(“./newJson.json”);
String leftJsonDoc=Files.readString(oldJsonPath);
String rightJsonDoc=Files.readString(newJsonPath);
JsonValue source=Json.createReader(新的StringReader(leftJsonDoc)).readValue();
JsonValue target=Json.createReader(新的StringReader(rightJsonDoc)).readValue();
JsonPatch diff=Json.createDiff(source.asJsonArray(),target.asJsonArray());
//使用add创建仅收集操作的容器
JsonArrayBuilder容器=Json.createArrayBuilder();
//循环JsonArray以查找带有“op:add”的JsonObject
for(JsonValue-jsonObj:diff.toJsonArray()){
//使用“op:add”获取JSONObject
if(jsonObj.toString()包含(“op\”:\“add”)){
container.add(jsonObj.asJsonObject());//将其添加到容器
}
}
//使用有效负载构建JsonArrayBuilder
JsonPatch payload=Json.createPatch(container.build());
JsonValue patchedPayload=payload.apply(source.asJsonArray());
}
}