我编写了一个应用程序,它按照以下结构创建了一个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的String,我将Child Ref附加到该节点
{
_reference:"CHILD-NEXT"
}
然后在此行之后添加整个新子节点
{
id:"CHILD-NEXT",
name:"Parent1-ChildNext",
type:"Child",
},
但这是非常低效的解决方案,因为每次都要迭代文件来搜索父节点并附加/插入子节点。
所以我正在寻找一种解决方案,我只是在内存中创建这个JSON结构,当我完成添加所有节点后,我可以将它写入文件。我在JAVA中这样做,所以我正在寻找一些现有的JSON库,我可以使用它来满足这个要求。
如果您需要上述说明的任何其他信息,请发表评论不明确。
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
来自JSON.org,你有JSON in Java,它将为你提供一个内存中的JSON表示,你可以操作然后再写。
This StackOverflow question包含一系列适用于Java的JSON库,包括google-gson,JSONlib,FlexJSON,Jackson,json-simple和yet more on this blog review
根据您是专注于全功能,轻量级还是快速,您可能会发现其中一种更适合您的需求。