【问题标题】:copy only the value of equal properties from one JSON to another仅将相等属性的值从一个 JSON 复制到另一个
【发布时间】:2017-07-26 19:40:51
【问题描述】:

有什么方法可以只将相等属性的值从一个 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 中不存在。

【问题讨论】:

  • 所以这些是字符串或任何类型的 json 表示对象?
  • 遍历 json1 中的属性,在 json2 中查找并复制该值。
  • 你使用的是什么 JSON 库?
  • 如果json1的字段不在json2中怎么办?
  • @Blackstar - 如果我的解决方案解决了您的问题,请接受回答并投票!

标签: java json clone deep-copy


【解决方案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。

【讨论】:

    【解决方案2】:

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

    json1.replaceAll(json2::getOrDefault);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2019-01-02
      相关资源
      最近更新 更多