【问题标题】:Updating multiple values of different keys in map using java使用java更新map中不同键的多个值
【发布时间】:2017-05-17 07:34:14
【问题描述】:

我已将 JSON 文件转换为地图,我需要使用 JAVA 一次修改不同键的多个值。

以下是地图转换后的JSON文件:

{
    "name": "",
    "numberID": null,
    "StartDate": "",
    "EndDate": "",
    "count": null,
    "level": null,
    "discipline": null,
    "paymentModel": null,
    "ownerName" : null,
    "coursepackType": null,
    "note": null
}   

我需要从上面的 JSON 一次更新多个值,我想为以下键添加值:

  • 姓名
  • 开始日期
  • 结束日期
  • 计数
  • 所有者姓名

我现在所写的只是更新单个值的方法,这已经是非常线性的: 使用以下系列函数:

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;
        }

有什么方法可以动态地实现我想要的,可能传递一个数组列表左右? 如果需要任何其他规格,请告诉我。

【问题讨论】:

  • Map 有一个 putAll 方法...

标签: java json hashmap


【解决方案1】:

您可以修改该方法以接受另一个 Map 而不是键值对,并使用另一个 map 中存在的新值更新现有的 map,例如

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;
}

你可以用Map调用这个方法,例如:

Map<String, String> values = new HashMap<>();
values.put("name", "abc");
values.put("foo", "bar");
body = updateValue(mapWithJSONNodes, "name", "abc")

此外,与其修改请求中传递的地图,不如创建一个新地图并将其返回(以保持现有map 的状态)。

【讨论】:

    【解决方案2】:

    大部分代码只应执行一次 - 将json 文件解析为Map,并将更新后的Map 序列化为JSON String

    对于您希望添加或修改的每个键/值对,只需重复 put 语句:

    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);
    

    如果您有一些数组或 List 包含要添加的键和值,您可以将 put 语句替换为循环,以进一步减少代码。

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多