gpt4 book ai didi

java - JSON 文件创建和添加节点到 JSON 树型结构

转载 作者:行者123 更新时间:2023-11-29 03:58:14 24 4
gpt4 key购买 nike

我编写了一个应用程序,它按照以下结构创建一个 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——子节点的IDCNAME-- 子节点名称CTYPE--子类型

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

    {
_reference:"CHILD-NEXT"
}

然后在这一行之后添加整个新的子节点

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

但这是一个非常低效的解决方案,因为每次都迭代文件以搜索父节点并追加/插入子节点。

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

以上解释不清楚,如需其他信息请留言。

最佳答案

您可以使用 org.json图书馆来做到这一点。

您首先需要将 json 文件读入 JSONObject,它基本上由键/值对和数组组成。然后,您可以遍历对象中的项目,查找 pid 并添加一个新的 child 。

下面是一些示例代码,可帮助您入门:

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

关于java - JSON 文件创建和添加节点到 JSON 树型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5106450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com