如果我们已经给出了两个json类型的字符串,我们如何在java中将它们合并成一个json字符串?
e.g.
String json1 = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S"
}
}
}
String json2 = {
"glossary": {
"title": "person name",
"age": "25"
}
}
应产生
String mergedJson = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S"
},
"age": "25"
}
}
4条答案
按热度按时间y0u0uwnf1#
下面的代码应该可以做到这一点,但需要做几个假设:
com.fasterxml.jackson.databind.ObjectMapper
)的ObjectMapper来序列化/反序列化jsonnjthzxwz2#
下面是递归合并两个json的代码,输出如下:注:这是深度合并,而不是浅合并(与shall和深度复制使用的概念相似)
8i9zcol23#
考虑使用一个可以完成这项工作的库,如JSON Merge,可从Maven Central获得。
您只需一行代码就可以获得所需的结果(如果您之前已经加载了JSONObject,则可以忽略String声明):
**注意:**在发生键冲突的情况下,传递给
merge
方法的第一个JSON参数总是比第二个参数具有更高的优先级/重要性。这个库也可以与Jackson、Gson和其他JSON提供程序一起使用。
lf5gs5x24#
所以我已经迟到了,但是如果有人偶然发现这个,我想分享我的解决方案,你可以用
com.fasterxml.jackson.core:jackson-databind
ObjectMapper.readerForUpdating()
深度合并两个json字符串。在这个场景中,您将两个Json作为String传入,并通过readerForUpdating(未经测试的代码)合并它们:
我用类似的代码将一个属性合并到一个已有的数据集中。在这个例子中,
SomeProperties
类包含一个hashmap,它保存了一个特定用户的属性。传入的propertiesString
是一个单点分隔的属性,例如some.random.property=value
。这个属性将被转换成一个JsonNode
和com.fasterxml.jackson.dataformat:jackson-dataformat-properties
。在这两种情况下,传入
objectReader.readValue()
的所有内容都将覆盖现有密钥。