2011-02-24 191 views
1

我寫下面的下面的結構,它創建了一個JSON文件的應用程序:JSON文件創建和添加節點JSON樹型結構

{ 
    identifier:"id", 
label:"name", 
items:[ 
    { 
    id:"ROOT", 
    name:"Parent1", 
    type:"ROOT", 
    children:[ 
     { 
      _reference:"CHILD1" 
     } 
    ] 
    }, 
    { 
    id:"CHILD1", 
    name:"Parent1-Child1", 
    type:"Child", 
    children:[ 
     { 
      _reference:"CHILD2" 
     } 
    ] 
    }, 
    { 
    id:"CHILD2", 
    name:"Child1-Child2", 
    type:"Child", 
    children:[ 
     { 
      _reference:"Child3" 
     }, 
     { 
      _reference:"Child4" 
     } 
    ] 
    }, 
    { 
    id:"Child3", 
    name:"Child2-Child3", 
    type:"GrandChild" 
    }, 
    { 
    id:"Child4", 
    name:"Child2-Child4", 
    type:"GrandChild" 
    }, 

] 
} 

所以我的應用程序實際上獲取該JSON樹

的每個節點以下數據

PID--它,而我必須附加子節點子節點 CNAME--子節點名稱的 CID-- ID CTYPE--兒童型

所以目前我我做的是通過迭代搜索在JSON文件中的PID(文件系統),一旦我發現其中有ID = PID字符串,我追加子裁判節點

{ 
     _reference:"CHILD-NEXT" 
    } 

再經過這一行加入整個新的子節點

{ 
id:"CHILD-NEXT", 
name:"Parent1-ChildNext", 
type:"Child", 
}, 

但是,這是因爲每一次迭代的文件中搜索父節點和附加/插入孩子的非常低效的解決方案。

所以我正在尋找一種解決方案,我只是在內存中創建這個JSON結構,當我完成添加所有節點,然後我可以將它寫入文件。我在JAVA中這樣做,所以我正在尋找一些現有的JSON庫,我可以用它來滿足這個要求。

如果您需要上述說明的任何其他信息,請發表評論不清楚。

回答

3

您可以使用org.json庫來執行此操作。

您首先需要將您的json文件讀取到基本上由鍵/值對和數組組成的JSONObject中。然後,您可以遍歷對象中的項目,查找pid並添加新的子項。

下面是一些示例代碼,您開始:

//read file   
BufferedReader in = new BufferedReader(new FileReader("path/json.txt")); 
String line; 
StringBuilder sb = new StringBuilder(); 
while((line =in.readLine()) != null){ 
    sb.append(line); 
} 
in.close(); 


//create a json object 
JSONObject json = new JSONObject(sb.toString()); 

//pid to search for 
String pid = "XXX"; 

//loop over the items array and look for pid 
JSONArray items = json.getJSONArray("items"); 
for(int i = 0 ; i < items.length(); i++){ 
    JSONObject item = items.getJSONObject(i); 
    String id = item.getString("id"); 
    if(pid.equals(id)){ 

     //get the children 
     JSONArray children; 
     if(item.has("children")){ 
      children = item.getJSONArray("children");  
     } 
     else{ 
      children = new JSONArray(); 
      item.put("children", children); 
     } 

     //append a new child ref to the children 
     JSONObject ref = new JSONObject(); 
     ref.put("_reference", "CHILD-NEXT"); 
     children.put(ref); 

     //create a new child node 
     JSONObject newItem = new JSONObject(); 
     newItem.put("id", "CHILD-NEXT"); 
     newItem.put("name", "Parent1-ChildNext"); 
     newItem.put("type", "Child"); 
     items.put(newItem); 
    } 
} 
+0

非常感謝羅布麻,它確實幫助我獲得所需的解決方案。 – 2011-02-24 18:16:11