无限级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);
}
}
}