2016-01-11 30 views
0

一般更新:我以前問過我是否可以按原樣獲取JSONObject的值,以便稍後將其與其覆蓋版本進行比較。我的第一個嘗試是:將JSONObject的當前值分配給另一個JSONObject

JSONObject oldObj = new JSONObject(); 
public void addRootNode(String nodeid, int depth) { 
    oldObj = obj; 
    //Get value of obj as is 
    addNodesToGraph(nodeid, depth); 
    //Change value of obj 
} 

//later 
public boolean compareJSON(){ 
    return oldObj.equals(obj); 
    //should return false 
} 

Altough我知道我只是想通過分配oldObjobj做參考obj和不加它,它的價值。我想知道是否有像JSON的valueOf()這樣的方法。
我已經得到回答,幫助我接近解決方案,但尚未解決。對於org.simple.json,是否有可能得到oldObj的當前值爲obj以便稍後進行比較並確定差異?
現在我自己不能查看org.simple.json.JSONObject這個類,因爲缺少源代碼。

作爲參考:org.json.JSONObject可以解決它與這個構造函數:
public JSONObject(JSONObject jo, java.lang.String[] names)。但是不提供我需要的其他功能。

+3

您將'obj'的值賦給'oldObj'並同時打印,顯然'toJSONString'將打印出相同的值。 – Mena

+1

你知道Java中的對象和引用之間的區別嗎? – immibis

+0

是的,我知道我目前只將'oldObj'分配給'obj'。我想知道是否有像'valueof()'這樣的選項。 –

回答

1
JSONObject oldObj = obj 

我認爲這不符合你的想法。您正在分配新的引用,而不是使用obj中的值創建新對象。

您可以使用此處指定的構造函數: http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject%28org.json.JSONObject,%20java.lang.String[]%29將舊值複製到新對象,但必須指定所有需要複製的密鑰。

+0

根據文檔public JSONObject(JSONObject jo, java.lang.String [] names)'應該做這個工作,但我得到這個錯誤'構造函數JSONObject(JSONObject,String [])未定義' –

+0

什麼是您使用的JSONObject類的包名稱? – blank

+0

'org.json.simple'我正在嘗試查找源以查看此構造函數是否存在。 –

0

嘗試使用Eclipse或NetBeans或其他IDE Debug選項! 他們有一個可變的標籤,你可以預覽每個值。

+0

我沒有試圖調試它,我想在以後獲得差異 –

+0

它是一個JSONObject,因此您可以獲取(String key)或get(Object key)。 你不能只是valueOf(),因爲json可以有很多元素。 – amkz

相關問題