在不知道根节点的情况下生成树形结构 (采用JSONObject)

废话不多说直接上代码

/**
 *      * 生成树形结构 在不知道跟节点的情况下
 * @param list  源数据
 * @param nodeList 跟节点数据
 * @param childName 子节点名称
 * @param key 节点key
 * @param up_key 上级节点key
 * @param child_level 节点级别 1,2,3...
 * @return
 */
 public static JSONArray recursionCreateArrayNotRoot(JSONArray list, JSONArray nodeList, String childName, String key, String up_key, int child_level) {
    if (nodeList == null) {
        //跟节点为空的情况下 ,遍历查询跟节点
        nodeList = new JSONArray();//作为跟节点的存在
        for (int i = 0; i < list.size(); i++) {
            boolean mark = false;
            JSONObject n = list.getJSONObject(i);
            for (int j = 0; j < list.size(); j++) {
                JSONObject m = list.getJSONObject(j);
                if (n.optString(up_key).equals(m.optString(key))) {
                    mark = true;
                    break;
                }
            }
            if (!mark) {
                n.put("child_level", child_level);
                nodeList.add(n);//添加的是没有上级的
            }
        }
        list.removeAll(nodeList);//将根节点移除出列表
    }
    //为根节点寻找下级
    for (int i = 0; i < nodeList.size(); i++) {
        JSONObject n = nodeList.getJSONObject(i);
        JSONArray child = n.optJSONArray(childName);
        if (child == null) {
            child = new JSONArray();
        }
        for (int j = 0; j < list.size(); j++) {
            JSONObject m = list.getJSONObject(j);
            m.put("child_level", child_level + 1);
            if (n.optString(key).equals(m.optString(up_key))) {
                child.add(m);
            }
        }
        n.put(childName, child);
        list.removeAll(child);//跟节点的下级找到后移除列表
        recursionCreateArrayNotRoot(list, n.optJSONArray(childName), childName, key, up_key, child_level + 1);//不断的寻找下级
    }
    return nodeList;

}
复制代码
理论上这个方法可以通用,不管你们定义的关键字是什么都可以使用

调用方法  JSONArray result = jJson.recursionCreateArrayNotRoot(array, null, "child","org_key", "up_org_key", 1);
复制代码
原始数据
    [
{
    "org_key":"2001",
    "up_org_key":"0",
    "usr_org_key":"1001",
    "usr_org_name":"光明城",
    "user_org_code":"10",
    "boss_id":"10010",
    "org_name":"光明城1",
    "org_code":"12",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村"
},
{
    "org_key":"2002",
    "up_org_key":"2001",
    "usr_org_key":"1002",
    "usr_org_name":"晋安区",
    "user_org_code":"10-0001",
    "boss_id":"10010",
    "org_name":"晋安区",
    "org_code":"12-1",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"2",
    "area_name":"虎邱村"
},
{
    "org_key":"2003",
    "up_org_key":"0",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"鼓楼区",
    "org_code":"11",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村"
},
{
    "org_key":"org_fTZXL9Vea8mLlxVCeGEWbFr4cQHQDQhZ",
    "up_org_key":"2001",
    "usr_org_key":"org_iU57sIDvHmM6LljFPSZbgNVieVhjKyBQ",
    "usr_org_name":"福州测试小区",
    "user_org_code":"10-0003",
    "boss_id":"10010",
    "org_name":"福州测试小区",
    "org_code":"12-2",
    "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
    "org_level":"2",
    "area_name":"文楼村"
},
{
    "org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
    "up_org_key":"2001",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"花园小区",
    "org_code":"12-5",
    "area_key":"IfwmlJrHl6137YZ7FvmcW1QjlNYoGWkS",
    "org_level":"2",
    "area_name":"福耀社区"
},
{
    "org_key":"org_fx5fjorqBRWJgWR4CxMx3Wquq0CimhnE",
    "up_org_key":"2003",
    "usr_org_key":"org_HHsupVt4HPzfcpSZShchbLivotsVdaFK",
    "usr_org_name":"大儒世家",
    "user_org_code":"003",
    "boss_id":"10010",
    "org_name":"五凤街道",
    "org_code":"11-1",
    "area_key":"DxeRGfT5mP2tq1Yw4b7hqzDckZiL2T9W",
    "org_level":"2",
    "area_name":"福和社区"
},
{
    "org_key":"org_gG6L68Wt0zjmCxp0dIWM0XKDCToyFndZ",
    "up_org_key":"org_gG6L68Wt0zjmCxp0dIWM0XKDCToyFndZ",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"部门A",
    "org_code":"001",
    "area_key":"vI59WqwHEDLvdyc3SI2Z0p1u8ZQl6dvl",
    "org_level":"2",
    "area_name":"柏渡村"
},
{
    "org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
    "up_org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
    "usr_org_key":"org_EdLEdVgGciifkYeRmluNawW6Tjgxq4Fu",
    "usr_org_name":"西洪小区",
    "user_org_code":"0021",
    "boss_id":"10010",
    "org_name":"区委会",
    "org_code":"12-5-1",
    "area_key":"pMhxXlafOcYeQ0vNWf3nz1tIdwvS0JdN",
    "org_level":"3",
    "area_name":"玉峰村"
},
{
    "org_key":"org_hCtV75g3cB6bBqJHarfRvKwG1YjEKwwX",
    "up_org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"某某部门",
    "org_code":"12-5-1-1",
    "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
    "org_level":"4",
    "area_name":"文楼村"
}
复制代码

]

生成后的数据
[
{
    "org_key":"2001",
    "up_org_key":"0",
    "usr_org_key":"1001",
    "usr_org_name":"光明城",
    "user_org_code":"10",
    "boss_id":"10010",
    "org_name":"光明城1",
    "org_code":"12",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村",
    "child_level":1,
    "child":[
        {
            "org_key":"2002",
            "up_org_key":"2001",
            "usr_org_key":"1002",
            "usr_org_name":"晋安区",
            "user_org_code":"10-0001",
            "boss_id":"10010",
            "org_name":"晋安区",
            "org_code":"12-1",
            "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
            "org_level":"2",
            "area_name":"虎邱村",
            "child_level":2,
            "child":[

            ]
        },
        {
            "org_key":"org_fTZXL9Vea8mLlxVCeGEWbFr4cQHQDQhZ",
            "up_org_key":"2001",
            "usr_org_key":"org_iU57sIDvHmM6LljFPSZbgNVieVhjKyBQ",
            "usr_org_name":"福州测试小区",
            "user_org_code":"10-0003",
            "boss_id":"10010",
            "org_name":"福州测试小区",
            "org_code":"12-2",
            "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
            "org_level":"2",
            "area_name":"文楼村",
            "child_level":2,
            "child":[

            ]
        },
        {
            "org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
            "up_org_key":"2001",
            "usr_org_key":"",
            "usr_org_name":"",
            "user_org_code":"",
            "boss_id":"10010",
            "org_name":"花园小区",
            "org_code":"12-5",
            "area_key":"IfwmlJrHl6137YZ7FvmcW1QjlNYoGWkS",
            "org_level":"2",
            "area_name":"福耀社区",
            "child_level":2,
            "child":[
                {
                    "org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
                    "up_org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
                    "usr_org_key":"org_EdLEdVgGciifkYeRmluNawW6Tjgxq4Fu",
                    "usr_org_name":"西洪小区",
                    "user_org_code":"0021",
                    "boss_id":"10010",
                    "org_name":"区委会",
                    "org_code":"12-5-1",
                    "area_key":"pMhxXlafOcYeQ0vNWf3nz1tIdwvS0JdN",
                    "org_level":"3",
                    "area_name":"玉峰村",
                    "child_level":3,
                    "child":[
                        {
                            "org_key":"org_hCtV75g3cB6bBqJHarfRvKwG1YjEKwwX",
                            "up_org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
                            "usr_org_key":"",
                            "usr_org_name":"",
                            "user_org_code":"",
                            "boss_id":"10010",
                            "org_name":"某某部门",
                            "org_code":"12-5-1-1",
                            "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
                            "org_level":"4",
                            "area_name":"文楼村",
                            "child_level":4,
                            "child":[

                            ]
                        }
                    ]
                }
            ]
        }
    ]
},
{
    "org_key":"2003",
    "up_org_key":"0",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"鼓楼区",
    "org_code":"11",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村",
    "child_level":1,
    "child":[
        {
            "org_key":"org_fx5fjorqBRWJgWR4CxMx3Wquq0CimhnE",
            "up_org_key":"2003",
            "usr_org_key":"org_HHsupVt4HPzfcpSZShchbLivotsVdaFK",
            "usr_org_name":"大儒世家",
            "user_org_code":"003",
            "boss_id":"10010",
            "org_name":"五凤街道",
            "org_code":"11-1",
            "area_key":"DxeRGfT5mP2tq1Yw4b7hqzDckZiL2T9W",
            "org_level":"2",
            "area_name":"福和社区",
            "child_level":2,
            "child":[

            ]
        }
    ]
}
复制代码

]

转载于:https://juejin.im/post/5cad58bee51d456e5633ddaa

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 生成树形结构的 JSON 代码可以使用递归方法来实现。 以下是一个示例代码: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class TreeNode { String name; List<TreeNode> children; public TreeNode(String name) { this.name = name; this.children = new ArrayList<>(); } public void addChild(TreeNode child) { this.children.add(child); } } public class TreeGenerator { public static void main(String[] args) { // 创建节点 TreeNode root = new TreeNode("root"); // 创建子节点 TreeNode node1 = new TreeNode("node1"); TreeNode node2 = new TreeNode("node2"); TreeNode node3 = new TreeNode("node3"); // 将子节点添加到节点的 children 中 root.addChild(node1); root.addChild(node2); root.addChild(node3); // 创建孙子节点 TreeNode node4 = new TreeNode("node4"); TreeNode node5 = new TreeNode("node5"); TreeNode node6 = new TreeNode("node6"); // 将孙子节点添加到第一个子节点的 children 中 node1.addChild(node4); node1.addChild(node5); node1.addChild(node6); // 使用 Jackson 库将树形结构转换为 JSON 字符串 ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(root); System.out.println(json); } } ``` 在这个代码中,我们定义了一个 TreeNode 类表示树节点,其中包含了节点名称和子节点的列表。然后我们使用递归的方法来构建树形结构,并使用 Jackson 库将其转换为 JSON 字符串。 运行这个代码后,你将得到一个类似于下面的输出: ```json ### 回答2: 据您的要求,我为您提供一个使用Java编写的生成树形结构的JSON代码示例。 首先,我们需要定义一个节点类Node,该类包含节点的标识符id、节点名称name以及子节点的列表children。 ```java import java.util.ArrayList; import java.util.List; class Node { private String id; private String name; private List<Node> children; public Node(String id, String name) { this.id = id; this.name = name; this.children = new ArrayList<>(); } public void addChild(Node node) { children.add(node); } // 这里省略了getter和setter方法 // 将节点及其子节点转化为JSON格式的字符串 public String toJson() { StringBuilder json = new StringBuilder(); json.append("{"); json.append("\"id\":\"").append(id).append("\","); json.append("\"name\":\"").append(name).append("\""); if (!children.isEmpty()) { json.append(",\"children\":["); for (int i = 0; i < children.size(); i++) { if (i > 0) { json.append(","); } json.append(children.get(i).toJson()); } json.append("]"); } json.append("}"); return json.toString(); } } ``` 接下来,我们可以使用Node类构建树形结构节点,并将其转化为JSON格式的字符串输出。 ```java public class Main { public static void main(String[] args) { Node root = new Node("1", "Root"); Node child1 = new Node("2", "Child 1"); Node child2 = new Node("3", "Child 2"); Node child3 = new Node("4", "Child 3"); Node grandchild1 = new Node("5", "Grandchild 1"); Node grandchild2 = new Node("6", "Grandchild 2"); child1.addChild(grandchild1); child2.addChild(grandchild2); root.addChild(child1); root.addChild(child2); root.addChild(child3); String json = root.toJson(); System.out.println(json); } } ``` 以上代码通过创建节点对象,添加子节点,并使用toJson方法将节点转化为JSON格式的字符串。您可以据自己的需求修改节点的属性和结构。 ### 回答3: Sure, 下面是一个使用Java编写的生成树形结构JSON的示例代码: ```java import com.google.gson.JsonArray; import com.google.gson.JsonObject; public class TreeNode { private int id; private String name; private TreeNode parent; private List<TreeNode> children; public TreeNode(int id, String name) { this.id = id; this.name = name; this.children = new ArrayList<>(); } public void setParent(TreeNode parent) { this.parent = parent; } public void addChild(TreeNode child) { child.setParent(this); children.add(child); } public JsonObject toJson() { JsonObject json = new JsonObject(); json.addProperty("id", id); json.addProperty("name", name); if (parent != null) { json.addProperty("parentId", parent.getId()); } if (children.size() > 0) { JsonArray childrenArray = new JsonArray(); for (TreeNode child : children) { childrenArray.add(child.toJson()); } json.add("children", childrenArray); } return json; } public int getId() { return id; } public String getName() { return name; } public TreeNode getParent() { return parent; } public List<TreeNode> getChildren() { return children; } public static void main(String[] args) { TreeNode root = new TreeNode(1, "Root"); TreeNode node1 = new TreeNode(2, "Node 1"); TreeNode node2 = new TreeNode(3, "Node 2"); TreeNode node3 = new TreeNode(4, "Node 3"); root.addChild(node1); root.addChild(node2); node1.addChild(node3); JsonObject json = root.toJson(); System.out.println(json.toString()); } } ``` 在这个示例代码中,TreeNode类表示树中的一个节点,包含id、name、parent和children等属性。节点可以通过addChild()方法添加子节点,并通过toJson()方法将节点转换为JSON对象。使用Gson库可以将JSON对象打印出来。 在main方法中,我们创建了一个树形结构,并将节点转换为JSON对象并打印出来。您可以据需要修改节点的属性和结构。希望这个代码对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值