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

copy only the value of equal properties from one JSON to another

有什么方法可以只将相同属性的值从一个 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 个 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));
    }
}

或者您可以有自己的自定义 class 扩展 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 进行深度 copy/override。

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

json1.replaceAll(json2::getOrDefault);

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