2017-07-26 483 views
2

有什么方法可以将只有相同属性的值从一个JSON复制到另一个?
例如:只复制从一个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中。

+0

所以这些是字符串或任何类型的JSON表示对象? –

+0

迭代遍历json1中的属性,在json2中查找它们并复制该值(如果找到)。 – Henry

+0

你在使用什么JSON库? – shmosel

回答

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。

0

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

json1.replaceAll(json2::getOrDefault); 

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

相关问题