Java 仅将相等属性的值从一个JSON复制到另一个JSON
有没有办法只将相等属性的值从一个JSON复制到另一个JSON?Java 仅将相等属性的值从一个JSON复制到另一个JSON,java,json,clone,deep-copy,Java,Json,Clone,Deep Copy,有没有办法只将相等属性的值从一个JSON复制到另一个JSON? 例如: json1- { "isMultiRow": true, "name": "Donny", "description": "Donnyboy" } json2- { "isMultiRow": false, "name": "Jonny", "description": "Jonny boy" "age": "old" "radius":"big" } 如果我做了类似于json1.copy
例如: json1-
{
"isMultiRow": true,
"name": "Donny",
"description": "Donnyboy"
}
json2-
{
"isMultiRow": false,
"name": "Jonny",
"description": "Jonny boy"
"age": "old"
"radius":"big"
}
如果我做了类似于json1.copy(json2)
的事情,我会得到json1-
{
"isMultiRow": false,
"name": "Jonny",
"description": "Jonny boy"
}
age
和radius
不会出现,因为它们在json1中不存在。您可以编写一个自定义方法,该方法接受2个JSONObject和需要从一个src JSONObject复制到dest JSONObject的字段列表
private static void copy(JSONObject dest, JSONObject src, List<String> fields) {
for (String key : fields) {
dest.put(key, src.get(key));
}
}
注意:
如果您的JSON有简单的键值,那么上面的实现将非常简单,如果您的JSON字符串有复杂的对象、数组等,那么您将为这些类型中的每一个添加处理,并从src到dest进行深度复制/覆盖 假设JSON对象的类型实现了Map
,则可以执行以下操作:
json1.replaceAll(json2::getOrDefault);
这将用
json2
中相应的值替换json1
中的字段。如果json2
没有给定的字段,它将保持原样。那么这些是字符串或任何类型的json表示对象?迭代json1中的属性,在json2中查找它们,如果找到,则复制值。您使用的json库是什么?如果json1的字段不在json2中怎么办?@Blackstar-请接受答案并投票,如果我的解决方案解决了你的问题!
json1.replaceAll(json2::getOrDefault);