如何在SmartGWT TreeGrid中加载JSON动态树数据
我有一个动态生成的JSON树结构,这意味着键和结构是未知的,它可以在每个请求中更改,每个对象中唯一的公共属性是oldValue和newValue键 JSON如下所示:如何在SmartGWT TreeGrid中加载JSON动态树数据,gwt,smartgwt,treegrid,Gwt,Smartgwt,Treegrid,我有一个动态生成的JSON树结构,这意味着键和结构是未知的,它可以在每个请求中更改,每个对象中唯一的公共属性是oldValue和newValue键 JSON如下所示: { "obj1": {"oldValue": "foo", "newValue": "foofoo"}, "obj2": {"obj2_1": {"oldValue": null, "newValue": "foo"} }, {"obj2_2": {"obj2
{
"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}
}
}
}
JavaScriptObject obj = JSON.decode(jsonData);
JSONObject jsonObject = new JSONObject(obj);
我怎样才能将这些数据以动态方式加载到TreeGrid中?是否可以使用XPath访问最深的键?我得出的结论是,使用SmartGWT是不可能的,因为在可以处理分层数据的SmartGWT组件中,需要将父键指定为属性,这不是很实用(IMHO) 现在的解决方案是:最好的替代方法是使用GWT核心小部件Tree和TreeItem,使用TreeItem可以友好地附加项,因此我将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");
}
}
}
欢迎评论