目前我有两个 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
键的值 dS
在map2
。换一种方式;您正在合并两个映射,它们都包含名为 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/