我正在使用一个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。