Reputation: 189
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?
Upvotes: 0
Views: 4448
Reputation: 189
As @cricket_007 advised, This solution worked for me:
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;
}
Upvotes: 3