2011-12-21 8 views
0

私はJSONツリー構造を持つディナミカルに作成しました。これはキーと構造が不明で、リクエストごとに変更できることを意味します。 OLDVALUEnewValueにキー...SmartGWT TreeGridでJSON動的ツリーデータをロードする方法

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}   
     } 
    } 
} 

どのように私はdinamically TreeGridで、このデータをロードすることができますか? XPathを使用して最も深いキーに到達することは可能ですか?

答えて

0

私は、階層データを扱うことができるSmartGWTコンポーネントでは、属性として親キーを指定する必要があり、あまり実用的ではない(IMHO)という事実のため、SmartGWTでは不可能であるという結論に達しました。 ...

今すぐ解決策:これに対する最善の選択肢は、GWTのコアウィジェットにツリーツリー項目を使用することですツリー項目をあなたはdinamicallyアイテムを添付することができますので、私はJSONObjectにJSONデータをロード再帰的にノードを追加しました。ツリーノードのロードプロセスの下

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); 

すべてのコメントを歓迎します!

関連する問題