2017-07-26 487 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沒有給定的字段,它將保持原樣。

相關問題