将列表分级为JSON(JAVA)



我正在使用一个API,它从级别结构数据集中检索数据。在网站中,它显示了一个Json结构,如下所示:

- Item1
- Item2
- Item3
- Item4
- Item5
- Item6
- Item7
- Item8
- Item9
...

问题是,当我从API检索数据时,它出现在一个txt文件中,每个元素都显示在这样的行中(我认为这是因为它们使用SQL(:

id:"1", Level:"1", name: "Item1"
id:"2", Level:"2", name: "Item2"
id:"3", Level:"2", name: "Item3"
id:"4", Level:"3", name: "Item4"
id:"5", Level:"2", name: "Item5"
id:"6", Level:"1", name: "Item6"
id:"7", Level:"2", name: "Item7"
id:"8", Level:"3", name: "Item8"
id:"9", Level:"4", name: "Item9"
...

现在,我正在将每一行转换为一个对象,并将所有这些行存储在Map中,id作为关键字。但我想将其转换为JSON,以便更容易地查看和编程级别结构。问题是,我不能确定会有多少级别,每个级别会有多少元素。有人能帮我吗?

逻辑

  • 迭代所有元素
  • 找出它们所属的列表
  • 将它们添加到该列表中
  • 将节点标记为下一级别的列表
  • 重复

详细信息

为了跟踪节点将要去的列表,您可以创建一个映射level -> list

var map = new HashMap<Integer, List<Node>>();

然后获取当前级别的列表并添加节点

var list = map.get(node.level());
list.add(node);

最后,也是最重要的部分,添加该节点的列表作为下一级的列表

因此,然后添加item1,所有级别为2的节点都将进入其列表。

当您添加item6(也是级别1(时,您将替换级别2现在所在的位置(例如item7(

map.put(node.level() + 1, node.list());

所以,把所有这些放在一起看起来是这样的:

var map = new HashMap<Integer, List<Node>>();
map.put(1, new ArrayList<>());
for (var node: input) {
var list = map.get(node.level());
list.add(node);
map.put(node.level() + 1, node.list());
}

独立示例

import java.util.*;

class Main {
public static void main(String ... args) {
var input = Arrays.asList(
node("1", "1",  "Item1"),
node("2", "2",  "Item2"),
node("3", "2",  "Item3"),
node("4", "3",  "Item4"),
node("5", "2",  "Item5"),
node("6", "1",  "Item6"),
node("7", "2",  "Item7"),
node("8", "3",  "Item8"),
node("9", "4",  "Item9")
);
var map = new HashMap<Integer, List<Node>>();
map.put(1, new ArrayList<>()); // for top level
for (var node: input) {
var list = map.get(node.level());
list.add(node);
map.put(node.level() + 1, node.list());
}
System.out.println(map.get(1)); 
}
static record Node(String id, int level, String name, List<Node> list){}
static Node node(String id, String level, String name) {
return new Node(id, Integer.valueOf(level), name, new ArrayList<>());
}
}

输出:

[
Node[id=1, level=1, name=Item1, list=[
Node[id=2, level=2, name=Item2, list=[]],
Node[id=3, level=2, name=Item3, list=[
Node[id=4, level=3, name=Item4, list=[]]
]],
Node[id=5, level=2, name=Item5, list=[]]]
],
Node[id=6, level=1, name=Item6, list=[
Node[id=7, level=2, name=Item7, list=[
Node[id=8, level=3, name=Item8, list=[
Node[id=9, level=4, name=Item9, list=[]]
]]
]]
]]
]

从那里,您可以遍历元素并将其转换为JSON。

最新更新