Java-合并JSON文件

Java-合并JSON文件,java,json,Java,Json,我正在构建一个更新程序util来更新我的应用程序。 我需要保存以前版本的配置文件。 一些配置文件是JSON文件。 有没有一种更新JSON文件的方法可以让我保留旧的值 但是如果有新的对象或关键点,它们也会被保存吗 例如: 版本1 json文件: { "name": "demo", "description": "Parse some JSON data", "location": "New York" } { "name": "demo", "descri

我正在构建一个更新程序util来更新我的应用程序。 我需要保存以前版本的配置文件。 一些配置文件是JSON文件。 有没有一种更新JSON文件的方法可以让我保留旧的值 但是如果有新的对象或关键点,它们也会被保存吗

例如: 版本1 json文件:

{
    "name": "demo",
    "description": "Parse some JSON data",
    "location": "New York"
}
{
    "name": "demo",
    "description": "Parse some JSON data",
    "location": "London",
    "day": "Monday"
}
版本2 json文件:

{
    "name": "demo",
    "description": "Parse some JSON data",
    "location": "New York"
}
{
    "name": "demo",
    "description": "Parse some JSON data",
    "location": "London",
    "day": "Monday"
}
合并后需要的json文件:

{
    "name": "demo",
    "description": "Parse some JSON data",
    "location": "New York",
    "day": "Monday"
}

有没有办法在没有任何外部库的情况下做到这一点?

正如@cricket\u 007所建议的,这个解决方案对我很有效:

public void mergeJsonsFiles(File newJson, File oldJson) throws Exception {
    HashMap<String, Object> newMap = convertJsonToMap(newJson);
    HashMap<String, Object> oldMap = convertJsonToMap(oldJson);

    for (Entry<String, Object> entry : oldMap.entrySet()) {
        if (newMap.get(entry.getKey()) == null) {
            newMap.put(entry.getKey(), entry.getValue());
        }
    }

    ObjectMapper mapper = new ObjectMapper();
    String jsonFromMap = mapper.writeValueAsString(newMap);

    PrintWriter writer = new PrintWriter(newJson);
    writer.write(jsonFromMap);
    writer.close();
}

private HashMap<String, Object> convertJsonToMap(File json) {
    ObjectMapper mapper = new ObjectMapper();
    HashMap<String, Object> map = new HashMap<String, Object>();
    try {
        map = mapper.readValue(json, new TypeReference<HashMap<String, Object>>(){});
    } catch (IOException e) {
        map.clear();
    }
    return map;
}
public void mergeJsonsFiles(文件newJson,文件oldJson)引发异常{
HashMap newMap=convertJsonToMap(newJson);
HashMap oldMap=convertJsonToMap(oldJson);
for(条目:oldMap.entrySet()){
if(newMap.get(entry.getKey())==null){
newMap.put(entry.getKey(),entry.getValue());
}
}
ObjectMapper mapper=新的ObjectMapper();
字符串jsonFromMap=mapper.writeValueAsString(newMap);
PrintWriter=新的PrintWriter(newJson);
writer.write(jsonFromMap);
writer.close();
}
私有HashMap convertJsonToMap(文件json){
ObjectMapper mapper=新的ObjectMapper();
HashMap=newHashMap();
试一试{
map=mapper.readValue(json,newTypeReference(){});
}捕获(IOE异常){
map.clear();
}
返回图;
}

正如@cricket\u 007所建议的,这个解决方案对我很有效:

public void mergeJsonsFiles(File newJson, File oldJson) throws Exception {
    HashMap<String, Object> newMap = convertJsonToMap(newJson);
    HashMap<String, Object> oldMap = convertJsonToMap(oldJson);

    for (Entry<String, Object> entry : oldMap.entrySet()) {
        if (newMap.get(entry.getKey()) == null) {
            newMap.put(entry.getKey(), entry.getValue());
        }
    }

    ObjectMapper mapper = new ObjectMapper();
    String jsonFromMap = mapper.writeValueAsString(newMap);

    PrintWriter writer = new PrintWriter(newJson);
    writer.write(jsonFromMap);
    writer.close();
}

private HashMap<String, Object> convertJsonToMap(File json) {
    ObjectMapper mapper = new ObjectMapper();
    HashMap<String, Object> map = new HashMap<String, Object>();
    try {
        map = mapper.readValue(json, new TypeReference<HashMap<String, Object>>(){});
    } catch (IOException e) {
        map.clear();
    }
    return map;
}
public void mergeJsonsFiles(文件newJson,文件oldJson)引发异常{
HashMap newMap=convertJsonToMap(newJson);
HashMap oldMap=convertJsonToMap(oldJson);
for(条目:oldMap.entrySet()){
if(newMap.get(entry.getKey())==null){
newMap.put(entry.getKey(),entry.getValue());
}
}
ObjectMapper mapper=新的ObjectMapper();
字符串jsonFromMap=mapper.writeValueAsString(newMap);
PrintWriter=新的PrintWriter(newJson);
writer.write(jsonFromMap);
writer.close();
}
私有HashMap convertJsonToMap(文件json){
ObjectMapper mapper=新的ObjectMapper();
HashMap=newHashMap();
试一试{
map=mapper.readValue(json,newTypeReference(){});
}捕获(IOE异常){
map.clear();
}
返回图;
}

您使用的是JSON库还是手工编写JSON?目前我没有使用JSON库,JSON是作为文件提供给我的,我不知道它们最初是如何编写的。请使用库。将两者都放入Hashmap中。重新生成JSON对象除非您想要
“位置”:[“纽约”,“伦敦”]
,否则它会变得更复杂。您看过了吗?您使用的是JSON库还是手工编写的JSON?目前我没有使用JSON库,JSON是作为文件提供给我的,我不知道它们最初是如何编写的。使用库。将两者都放入Hashmap中。重建JSON对象除非您想要
“位置”:[“纽约”、“伦敦”]
,否则它会变得更复杂。您看过了吗?