'Updating multiple values of different keys in map using java
I have converted a JSON file to a map and I need to modify multiple values of different keys at once using JAVA.
Following is the map converted JSON file:
{
    "name": "",
    "numberID": null,
    "StartDate": "",
    "EndDate": "",
    "count": null,
    "level": null,
    "discipline": null,
    "paymentModel": null,
    "ownerName" : null,
    "coursepackType": null,
    "note": null
}   
I need to update multiple values at once from above JSON, I want to add value to following keys:
- name
 - StartDate
 - EndDate
 - count
 - ownerName
 
All I have write now is way to update just single value, which is already pretty linear: Using following series of functions:
String body="";
File testDataJsonfile = new File("path/xxx.json");
        JsonNode testJSONNodes = getJsonNodes(testDataJsonfile);
        Map<String, Object> mapWithJSONNodes = convertJSONTOMAP(testJSONNodes);
        body = updateValue(mapWithJSONNodes, "name", "abc")
public String updateValue(Map<String,Object> map ,String key,String value) throws JsonProcessingException{
            map.put(key, value);
            String convertedJSONFile = new ObjectMapper().writeValueAsString(map);
            return convertedJSONFile;
        }
Any way to to achieve what I want dynamically, probably passing an array list or so? Please let me know if any other specification is required.
Solution 1:[1]
You can modify the method to accept another Map rather than key value pairs and update the existing map with new values present in another map, e.g.
public String updateValue(Map<String,Object> map, Map<String, String> updatedValues) throws JsonProcessingException{
    Map<String, Object> resultMap = new HashMap<>(map);
    resultMap.putAll(updatedValues);
    String convertedJSONFile = new ObjectMapper().writeValueAsString(resultMap);
    return convertedJSONFile;
}
You can call this method with Map, e.g.:
Map<String, String> values = new HashMap<>();
values.put("name", "abc");
values.put("foo", "bar");
body = updateValue(mapWithJSONNodes, "name", "abc")
Also, rather than modifying the map passed in the request you should create a new map and return it (to maintain the state of existing map).
Solution 2:[2]
Most of this code should only be executed once - the parsing of the json file into a Map and the serialization of the updated Map into a JSON String.
Only the put statements should be repeated for each key/value pair you wish to add or modify:
File testDataJsonfile = new File("path/xxx.json");
JsonNode testJSONNodes = getJsonNodes(testDataJsonfile);
Map<String, Object> mapWithJSONNodes = convertJSONTOMAP(testJSONNodes);
mapWithJSONNodes.put ("name", "abc");
mapWithJSONNodes.put (...);
...
String body = new ObjectMapper().writeValueAsString(mapWithJSONNodes);
If you have some array or List containing the keys and values you wish to add, you can replace the put statements with a loop, to reduce the code a bit further.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Darshan Mehta | 
| Solution 2 | 
