java - 使用 java 将一个 json 对象作为另一个对象的子对象

标签 java json

我正在解决一个问题,这部分我可以使用一些帮助,我有以下 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

此外,可以删除数组的第二个元素以保存带有子对象的单个对象。

编辑:

根据您的新要求,您可能还想添加文件和文件夹。采用我的肮脏方法,我可以手动设置这些值。但是,肯定会强调 FilesFolders 可以共享单一数据类型 - 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": "fol‌​‌​der2",
        "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": "fol‌​‌​der2",
                        "type": "file"
                    }
                ]
            }
        ]
    }
]

希望这能让您更好地了解通用方法。祝你好运!

关于java - 使用 java 将一个 json 对象作为另一个对象的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21522223/

相关文章:

java - 如何将通用项添加到通用 ArrayList?

javascript - 如何从所有 JSON 值中删除引号并且不删除 Node JS 中 JSON 键中的引号

java - 如何将字典项序列化为类的平面属性?

javascript - 使用不同的键迭代 Json

javascript - 如何按值查找多个数组元素?

Java,为什么 collections.sort() 仍然适用于非比较器类型的参数?

java - 如何通过枚举列表进行 "reset"迭代

java - 我正在尝试从广播接收器发出 API 请求,有人能提到正确的方法吗?

java - 将字节数组转换为转义字符串

javascript - JSON.parse 如何管理 'undefined' ?