I am building an updater util that update my application.
I need to save my configuration files from the previous version.
Some of the configurations files are JSON files.
Is there a way to update the JSON files in a way that i'm keeping the old values
but if there new objects or keys they will be saved also?
For example:
Version 1 json file:
{
"name": "demo",
"description": "Parse some JSON data",
"location": "New York"
}
Version 2 json file:
{
"name": "demo",
"description": "Parse some JSON data",
"location": "London",
"day": "Monday"
}
Expected json file after the merge:
{
"name": "demo",
"description": "Parse some JSON data",
"location": "New York",
"day": "Monday"
}
Is there a way to do so without any external library?
解决方案
As @cricket_007 advised, This solution worked for me:
public void mergeJsonsFiles(File newJson, File oldJson) throws Exception {
HashMap newMap = convertJsonToMap(newJson);
HashMap oldMap = convertJsonToMap(oldJson);
for (Entry 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 convertJsonToMap(File json) {
ObjectMapper mapper = new ObjectMapper();
HashMap map = new HashMap();
try {
map = mapper.readValue(json, new TypeReference>(){});
} catch (IOException e) {
map.clear();
}
return map;
}