Java JSON文件创建和向JSON树型结构添加节点

Java JSON文件创建和向JSON树型结构添加节点,java,json,Java,Json,我编写了一个应用程序,按照以下结构创建JSON文件: { identifier:"id", label:"name", items:[ { id:"ROOT", name:"Parent1", type:"ROOT", children:[ { _reference:"CHILD1" } ] }, { id:"CHILD1", name:"Parent1-C

我编写了一个应用程序,按照以下结构创建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—我必须将子节点附加到它 CID-子节点的ID CNAME-子节点名称 CTYPE-子类型

所以目前我所做的是通过在文件系统上迭代来搜索json文件中的PID,一旦我找到id=PID的字符串,我就向该节点添加一个子引用

    {
       _reference:"CHILD-NEXT"
    }
然后在这一行之后添加整个新的子节点

{
 id:"CHILD-NEXT",
 name:"Parent1-ChildNext",
 type:"Child",
},
但这是一个非常低效的解决方案,因为每次都要迭代文件以搜索父节点并附加/插入子节点

因此,我正在寻找一种解决方案,在内存中创建这个JSON结构,当我添加完所有节点后,我就可以将其写入文件。我正在用JAVA做这件事,所以我正在寻找一些现有的JSON库,我可以用它们来满足这个需求

如果您需要上述解释的任何其他信息,请发表评论。

您从JSON.org获得的将为您提供内存中的JSON表示,您可以对其进行操作,然后编写

有一个完整的Java JSON库列表,包括、、和

取决于您是专注于全功能、轻量级还是快速,您可能会发现其中一种更适合您的需要。

从JSON.org您可以获得一个内存中的JSON表示,您可以操作并编写它

有一个完整的Java 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);
    }
}
您可以使用库来执行此操作

首先需要将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);
    }
}

非常感谢,它确实帮助我得到了所需的解决方案。非常感谢,它确实帮助我得到了所需的解决方案。