java - 比较两个 json 并从第一个 json java 返回唯一键

标签 java json hashmap jackson compare

目前我有两个 json 正文: 1. 全局json 2.companyjson

全局json:

"dS": {
      "a": 5,
      "b": false,
      "c": 5,
      "d": false,
      "e": 1,
      "f": 5,
      "g": 33.528,
      "h": false
    }

公司 json:

 "dS": {
    "a": 90
  },

预期输出:

 "dS": {
          "a": 90,
          "b": false,
          "c": 5,
          "d": false,
          "e": 1,
          "f": 5,
          "g": 33.528,
          "h": false
        }

我尝试执行以下操作:

Map<String, Object> map1 = mapper.readValue(companyjson, Map.class);
Map<String, Object> map2 = mapper.readValue(globaljson, Map.class);
Map<String, Object> merged = new HashMap<String, Object>(map1);
merged.putAll(map2);

但这会返回

"dS": {
    "a": 90
  },

我目前正在使用 jackson 库,但找不到任何可以解决我的要求的方法。我不想对我的 key 进行硬编码,因为 key 名称将来可能会更改。

最佳答案

合并之前...

  • map1必须是:{dS={a=90}}
  • map2必须是:{dS={a=5, b=false, c=5, d=false, e=1, f=5, g=33.528, h=false}}

然后在这一行之后...

Map<String, Object> merged = new HashMap<String, Object>(map1);

....merged必须是:{dS={a=90}}

然后在这一行之后...

merged.putAll(map2);

... merged必须是{dS={a=5, b=false, c=5, d=false, e=1, f=5, g=33.528, h=false}}由于 putAll 的影响就是替换键dS的值在merged键的值 dSmap2 。换一种方式;您正在合并两个映射,它们都包含名为 dS 的键并希望合并对 dS内容敏感而合并实际上只是替换了 dS 的值与另一个的值 dS .

要获得所需的结果,您必须合并 dS 下存在的 map 。键,例如:

Map<String, Object> map1 = mapper.readValue(companyJson, Map.class);
Map<String, Object> map2 = mapper.readValue(globalJson, Map.class);

Map<String, Object> globalMap = (Map) map2.get("dS");
Map<String, Object> companyMap = (Map) map1.get("dS");
globalMap.putAll(companyMap);

上面的代码结果为 map2具有以下内容:

{dS={a=90, b=false, c=5, d=false, e=1, f=5, g=33.528, h=false}}

关于java - 比较两个 json 并从第一个 json java 返回唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46777671/

相关文章:

java - 如何在JSP页面中将整数转换为日期,然后格式化该日期?

Javascript - 从 JSON 到对象的数组

java - 写但不读时java中的同步 HashMap

java - 是什么导致基于 JTabbedPane 的 Swing 应用程序性能下降?

java - 使用两个不同版本的程序读取/写入相同的 csv

json - Go json.NewDecoder().Decode() 似乎不遵守上下文截止日期

java - 如何在java中减去hashmap数据

java - 循环遍历包含字符串和另一个映射的映射

java - 使用 bouncy caSTLe 生成 dsa/elgamal key 对,在 GPG 中导入时不会出错

python - GAE NDB 结构化列表到 Json