2011-12-21 77 views
0

我有一個以二進制方式生成的JSON樹結構,這意味着鍵和結構是未知的,它可以在每個請求中更改,每個對象中唯一的公共屬性是屬性oldValueNEWVALUE鍵...如何在SmartGWT中加載JSON動態樹數據TreeGrid

的JSON看起來是這樣的:

{ 
"obj1": 
    {"oldValue": "foo", "newValue": "foofoo"}, 
"obj2": 
    {"obj2_1": 
     {"oldValue": null, "newValue": "foo"} 
    }, 
    {"obj2_2": 
     {"obj2_2_1": 
      {"oldValue": "foo", "newValue": "foofoo"}   
     }, 
     {"obj2_2_2": 
      {"oldValue": "foo1", "newValue": null}   
     } 
    } 
} 

我怎樣才能在一個的TreeGrid dinamically加載這個數據?使用XPath可以達到最深的密鑰嗎?

回答

0

我得出這樣的結論,SmartGWT是不可能的,因爲在可以處理分層數據的SmartGWT組件中,您需要指定父鍵作爲屬性,這不是很實用(恕我直言) ...

現在的解決方案:這個最好的選擇是使用GWT核心部件TreeItem,與TreeItem可以dinamically附加項目,所以我裝了JSON數據轉換成的JSONObject並遞歸地添加節點。

下面的樹節點加載過程:

private void loadTreeNodes(JSONObject jsonObject, TreeItem parent) {   
    for (String key: jsonObject.keySet()) {     
     JSONValue jsonValue = jsonObject.get(key);  
     TreeItem item = new TreeItem("<b>" + key + "</b> "); 
     parent.addItem(item); 

     if (jsonValue != null) { 
      if (jsonValue.isObject() != null) { 
       loadTreeNodes(jsonValue.isObject(), item); 
      } else if (jsonValue.isArray() != null) { 

      } else { 
       if ("oldValue".equals(key)) { 
        item.setHTML("<b>before:</b> " + jsonValue.toString()); 
       } else { 
        item.setHTML("<b>after:</b> " + jsonValue.toString()); 
       }      
      } 
     } else { 
      item.setText("<b>" + item.getText() + ":</b> null"); 
     } 
    }   
} 

我裝這樣的JSON數據:

JavaScriptObject obj = JSON.decode(jsonData); 
JSONObject jsonObject = new JSONObject(obj); 

任何意見,歡迎!

相關問題