我正在解决一个问题,这部分我可以使用一些帮助,我有以下 JSON 数组:
parentArray: [{"name":"folder1","children":[],"parent":"root","type":"folder"}, {"name":"folder2","children":[],"parent":"folder1","type":"folder"}]
我需要创建一个方法,将名称为“folder2”的对象放入“folder1”的“children”数组中。
感谢您的帮助或指点。
最佳答案
您可以使用 gson
以更简洁的方式实现它。
为 Parent
创建一个 POJO
和一个 Parent[]
类型的数组值
public class Parent {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Parent[] getChildren() {
return children;
}
public void setChildren(Parent[] children) {
this.children = children;
}
private String name;
private String parent;
private String type;
private Parent[] children;
}
轻松读取 json 并操作由此返回的 Parent 对象:
BufferedReader br = new BufferedReader(new FileReader("array.json")); //File containing your initial json
Gson gson = new Gson();
Parent[] parentObjArray = gson.fromJson(br, Parent[].class);
Parent folder2 = parentObjArray[1];
parentObjArray[0].setChildren(new Parent[] { folder2 });
System.out.println(gson.toJson(parentObjArray));
生成的 json:
[
{
"name": "folder1",
"parent": "root",
"type": "folder",
"children": [
{
"name": "folder2",
"parent": "folder1",
"type": "folder",
"children": []
}
]
},
{
"name": "folder2",
"parent": "folder1",
"type": "folder",
"children": []
}
]
上面的代码使用了一些假设,特别是 json 数组
的确切索引。您可以根据您的要求进一步概括和操作 json
。
此外,可以删除数组的第二个元素以保存带有子对象的单个对象。
编辑:
根据您的新要求,您可能还想添加文件和文件夹。采用我的肮脏方法,我可以手动设置这些值。但是,肯定会强调 Files
和 Folders
可以共享单一数据类型 - Parent
,因此该解决方案成为采用递归方法。
所以是:
Folder1
||=> File1
||=> Folder2
||=> File2
更改了 inout json:
[
{
"name": "folder1",
"children": [],
"parent": "root",
"type": "folder"
},
{
"name": "folder2",
"children": [],
"parent": "folder1",
"type": "folder"
},
{
"name": "file1",
"parent": "folder1",
"type": "file"
},
{
"name": "file2",
"parent": "folder2",
"type": "file"
}
]
手动设置这些值并修改json
Gson gson = new Gson();
Parent[] parentObjArray = gson.fromJson(br, Parent[].class);
Parent file2 = parentObjArray[3];
parentObjArray[1].setChildren(new Parent[] { file2 });
Parent folder2 = parentObjArray[1];
Parent file1 = parentObjArray[2];
parentObjArray[0].setChildren(new Parent[] { file1, folder2 });
parentObjArray = new Parent[]{parentObjArray[0]};
System.out.println(gson.toJson(parentObjArray));
现在修改json:
[
{
"name": "folder1",
"parent": "root",
"type": "folder",
"children": [
{
"name": "file1",
"parent": "folder1",
"type": "file"
},
{
"name": "folder2",
"parent": "folder1",
"type": "folder",
"children": [
{
"name": "file2",
"parent": "folder2",
"type": "file"
}
]
}
]
}
]
希望这能让您更好地了解通用方法。祝你好运!
关于java - 使用 java 将一个 json 对象作为另一个对象的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21522223/