2013-03-23 67 views
6

我有兩個json文件,我想得到一個包含差異的json。 重要只有內容的實際差異應顯示,無論改變某些元素的順序。以編程方式返回兩個json文件差異的最佳方式

什麼是最好的方法來做到這一點?我正在尋找儘可能高效的解決方案,因爲json可能包含大量數據,用戶需要儘快完成工作。

注意:json s可能包含在不同深度編碼的數據。任何編程語言都可以,但我更喜歡一個可以在PHP中輕鬆實現的答案。

+0

無論你如何看待它,我相信你只需要通過每一個關鍵。除非你可以依靠某種標識符,但對於這樣的事情,你需要詳細說明更多 – Alexander 2013-03-23 19:12:20

+1

我在這裏回答了一個類似的問題:「[多維數組,檢查差異] [1]」。如果需要,可以通過遞歸調用「get_keys」和「compare_records」方法將答案修改爲分支。 [1]:http://stackoverflow.com/questions/15504734/multidimensional-arrays-check-difference/15504984#15504984 – 2013-03-23 19:21:48

+0

@JDPace對不起,沒看出來 – 2013-03-23 19:24:59

回答

4

基本上,你想要的是類似array_diff_assoc的東西,但適用於JSON對象和遞歸。

由於參考問題,array_diff函數不是遞歸的:可以將數組的引用賦值給該數組的條目,從而使數組無限遞歸。我不認爲有可能得到與json對象相同的情況,從而使遞歸函數安全。

讓我們假設你想計算物體A和B之間的差異,有結果的對象C. 的原理是遍歷的每個字段(foreach應該做的),而當:

  • 沒有這樣的字段存在於B,將其複製在C.在乙
  • 類似字段存在,放於C A場與B字段的差異,這是對DIFF函數遞歸調用的結果以這些字段作爲參數,以及結果的新對象。

應該遵守A的順序。

+0

我應該對「json」進行排序嗎? – 2013-03-23 19:30:54

+2

這沒有必要。 – 2013-03-23 19:35:51

+1

@BujancaMihai,注意這個算法不會考慮只出現在B – Alexander 2013-03-23 20:29:50

7

嘗試使用array_diff功能

array_diff(json_decode($jsonData1), json_decode($jsonData2)); 
相關問題