多层json解析根据层级生成id

无限级json数组动态根据层级生成id,先贴出原始数据

{
    "project_name": "项目名称",
    "project_remark": "test",
    "Project_tree_node": [
        {
            "label": "造价入口",
            "children": [
                {
                    "label": "变更"
                },
                {
                    "label": "测量资料"
                },
                {
                    "label": "计量台账"
                },
                {
                    "label": "计算书"
                }
            ]
        },
        {
            "label": "资料入口",
            "children": [
                {
                    "label": "资料",
                    "children": [
                        {
                            "label": "前期及验收、其他资料",
                            "children": [
                                {
                                    "label": "立项批复"
                                },
                                {
                                    "label": "财评报告"
                                }
                            ]
                        },
                        {
                            "label": "前期收集资料",
                            "children": [
                                {
                                    "label": "开工准备资料",
                                    "children": [
                                        {
                                            "label": "合同项目开工申请表",
                                            "children": [
                                                {
                                                    "label": "扫描件"
                                                },
                                                {
                                                    "label": "电子档"
                                                }
                                            ]
                                        },
                                        {
                                            "label": "合同工程开工申请报告"
                                        },
                                        {
                                            "label": "合同开工批复"
                                        }
                                    ]
                                },
                                {
                                    "label": "图纸会审"
                                },
                                {
                                    "label": "施工组织设计"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "label": "通用入口",
            "children": [
                {
                    "label": "项目详情",
                    "children": [
                        {
                            "label": "单位1",
                            "children": [
                                {
                                    "label": "分部1",
                                    "children": [
                                        {
                                            "label": "子分部1",
                                            "children": [
                                                {
                                                    "label": "分项1",
                                                    "children": [
                                                        {
                                                            "label": "检验批1"
                                                        }
                                                    ]
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "label": "图纸"
                },
                {
                    "label": "存在的问题"
                }
            ]
        }
    ]
}

原始数据label是本层目录名称,children是目录下面子项,没有children就没有子项目录。原始数据目录子项是动态创建的,这里只是举一些例子。

先把最开始 的json数据传入方法中,当做原始数据传入,然后再createChildTree方法里面正式解析数据

 JSONArray branch = json.getJSONArray("Project_tree_node");
         
              
 createChildTree(branch, project.getId(), project.getId(), project_name);
 

方法得到原始数据后,循环第一级每一项,在每一项中进行处理。

获取第一级的第一项中的label和children,label是一定存在的,children不存在说明只有目录结构只到本级,没有下一级。每一级的childrenId就是我们要生成的数据,根据这个数据结构可以判断当前目前属于哪一级,名称也会对应起来。级别名称是项目id和 - 和级别序列拼接起来的。

先将本级目录存储起来,生成childrenId

如果没有下级,本项产生的childrenId永远都是project_id1开头和一个-组合起来的

如果有下级,产生的childrenId是。。。。。

public void createChildTree(JSONArray jsonArray, String project_id, String project_id1, String project_name) {
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject json1 = (JSONObject) JSONObject.toJSON(jsonArray.get(i));

            String label = json1.getString("label");
            JSONArray branch = json1.getJSONArray("children");

            String project_id2 = project_id1 + "-" + (i + 1);

            // 没有存过这个目录,就存储
            Tree tree = new Tree();
            tree.setLabel(label);
            tree.setProjectId(Integer.valueOf(project_id));
            tree.setProjectName(project_name);
            tree.setChildrenId(project_id2);
            treeService.save(tree);

            // 存在下级
            if (branch != null) {
                createChildTree(branch, project_id, project_id2, project_name);
            }
        }
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值