仅将相同属性的值从一个JSON复制到另一个JSON

时间:2017-07-26 19:40:51

标签: 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(json2)这样的事情,我会在json1上找到 -

{
  "isMultiRow": false,
  "name": "Jonny",
  "description": "Jonny boy"
}

ageradius不会出现,因为它们不存在于json1中。

2 个答案:

答案 0 :(得分:1)

您可以编写一个接受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));
    }
}

或者您可以拥有自己的自定义类来扩展JSONObject并拥有一个新的方法副本,该副本接受另一个JSON并按字段复制。

public class JSON extends JSONObject {

    private static final long serialVersionUID = 1L;

    public void copy(JSON other) {
        // implement copy logic by iterating over keySet etc
    }
}

NOTE:如果您的JSON具有简单的键值,那么上面将是非常简单的实现,如果您的JSON字符串具有复杂对象,数组等,那么您将为每个类型添加处理并执行深层复制/从src覆盖到dest。

答案 1 :(得分:0)

假设您的JSON对象的类型实现Map,您可以这样做:

json1.replaceAll(json2::getOrDefault);

这会将json1中的字段替换为json2中的相应值。如果json2没有给定字段,则会保留原样。