我需要你的帮助,从可用的数据中创建一个JSON树结构。这是我目前可用的数据,
json格式的相同数据如下,
{
"employees": [
{
"empId": 1,
"empName": "Alex",
"empGroupId": 3,
"empLevel": 0
},
{
"empId": 42,
"empName": "Sam",
"empGroupId": 3,
"empLevel": 1
},
{
"empId": 22,
"empName": "Max",
"empGroupId": 3,
"empLevel": 2
},
{
"empId": 54,
"empName": "Ervin",
"empGroupId": 3,
"empLevel": 3
},
{
"empId": 1,
"empName": "Alex",
"empGroupId": 5,
"empLevel": 0
},
{
"empId": 42,
"empName": "Sam",
"empGroupId": 5,
"empLevel": 1
},
{
"empId": 22,
"empName": "Max",
"empGroupId": 5,
"empLevel": 2
},
{
"empId": 68,
"empName": "Jack",
"empGroupId": 5,
"empLevel": 3
},
{
"empId": 1,
"empName": "Alex",
"empGroupId": 7,
"empLevel": 0
},
{
"empId": 38,
"empName": "Mark",
"empGroupId": 7,
"empLevel": 7
},
{
"empId": 12,
"empName": "Danny",
"empGroupId": 7,
"empLevel": 2
},
{
"empId": 1,
"empName": "Alex",
"empGroupId": 4,
"empLevel": 0
},
{
"empId": 38,
"empName": "Mark",
"empGroupId": 4,
"empLevel": 1
},
{
"empId": 55,
"empName": "Kate",
"empGroupId": 4,
"empLevel": 2
}
]
}
我想创建一个JSON树结构,它将以分层的方式Map所有的员工。这样所有的普通员工将只出现一次,并根据他们的级别。
因此,基本上,empName将有一个唯一的empId与其关联。多个员工可以是员工组的一部分[由empGroupId指示]。empLevel指示员工的级别,0表示顶层人员,然后1,依此类推...
例如,如果我们考虑上表中的前8行,则它包含2个empGroupId,即3和5。Alex、Sam和Max是两个组中公用的员工,级别分别为0、1、2。Ervin和Jack是最后一个级别,级别为3。由于他们的前3个成员相同,因此最终结构将具有:亚历克斯-〉山姆-〉马克斯-〉[欧文,杰克]
下面是我想要生成的,
[{
"empName":"Alex",
"empId" : 1,
"empLevel" : 0,
"children" :[{
"empName":"Sam",
"empId" : 42,
"empLevel" : 1,
"children" : [{
"empName":"Max",
"empId" : 22,
"empLevel" : 2,
"children": [{
"empName":"Ervin",
"empId" : 54,
"empLevel" : 3
},{
"empName":"Jack",
"empId" : 68,
"empLevel" : 3
}]
}]
},
{
"empName":"Mark",
"empId" : 38,
"empLevel" : 1,
"children":[{
"empName":"Danny",
"empId" : 12,
"empLevel" : 2
},{
"empName":"Kate",
"empId" : 55,
"empLevel" : 2
}]
}]
}]
到目前为止,我已经创建了一个示例程序来读取JSON文件并Map雇员。但是不确定如何处理这个树结构的设计。这是我现在所拥有的。
@Data
public class Employee {
private Integer empId;
private String empName;
private Integer empGroupId;
private Integer empLevel;
}
@Data
public class EmpLevels {
private List<Employee> employees;
}
@Data
public class EmpTree {
private Integer empId;
private String empName;
private Integer empLevel;
private List<Employee> children;
}
到目前为止,我的主方法包含以下内容,关于阅读JSON和Map员工,
EmpLevels empLevels = mapper.readValue(Paths.get("emp.json").toFile(), EmpLevels.class);
List<Employee> employees = empLevels.getEmployees();
System.out.println("Employees : "+employees);
如何继续构建生成JSON树结构的逻辑?我们有什么库可以帮助我们吗?或者有什么最新的Java发布特性可以帮助我们生成这个树结构吗?
2条答案
按热度按时间rdrgkggo1#
当我看到您的JSON时,首先想到的是:
如果不是这样,也许他们是一种方法来生成一个对象从您的JSON与Jackson/对象Map器,并找到一个想法他们?但我不知道如果Jackson可以做到这一点,没有一个给定的类,但也许它有助于您同时寻找一个解决方案。
laximzn52#
这是算法的问题,库或Java特性帮不了你。
首先,
EmpTree.children
应该是List<EmpTree>
的类型。下面是一个递归函数,它构建了一个
EmpTree
。此语句用于调用函数。