仅将相同属性的值从一个 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"
}
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));
}
}
或者您可以有自己的自定义 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
没有给定的字段,它将保持原样。
有什么方法可以只将相同属性的值从一个 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"
}
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));
}
}
或者您可以有自己的自定义 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
没有给定的字段,它将保持原样。