Java代码实现 JSON 双列表转换为树结构
以下是一个示例的 Java 代码实现,将 JSON 中的两个列表转换为树:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonToListTreeConverter {
public static void main(String[] args) throws IOException {
String json = '{\'list1\':[[1,\'A\'],[2,\'B\'],[3,\'C\']],\'list2\':[[1,2],[2,3],[1,3]]}';
ObjectMapper objectMapper = new ObjectMapper();
Map<String, List<List<Object>>> data = objectMapper.readValue(json, new TypeReference<Map<String, List<List<Object>>>>() {});
List<List<Object>> list1 = data.get('list1');
List<List<Object>> list2 = data.get('list2');
Map<Integer, TreeNode> nodeMap = new HashMap<>();
for (List<Object> item : list1) {
int id = (int) item.get(0);
String name = (String) item.get(1);
TreeNode node = new TreeNode(id, name);
nodeMap.put(id, node);
}
for (List<Object> item : list2) {
int parentId = (int) item.get(0);
int childId = (int) item.get(1);
TreeNode parentNode = nodeMap.get(parentId);
TreeNode childNode = nodeMap.get(childId);
parentNode.addChild(childNode);
}
List<TreeNode> roots = new ArrayList<>();
for (TreeNode node : nodeMap.values()) {
if (node.getParent() == null) {
roots.add(node);
}
}
for (TreeNode root : roots) {
printTree(root, '');
}
}
private static void printTree(TreeNode node, String indent) {
System.out.println(indent + node.getName());
for (TreeNode child : node.getChildren()) {
printTree(child, indent + ' ');
}
}
}
class TreeNode {
private int id;
private String name;
private TreeNode parent;
private List<TreeNode> children;
public TreeNode(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<>();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public List<TreeNode> getChildren() {
return children;
}
public void addChild(TreeNode child) {
child.setParent(this);
children.add(child);
}
}
这段代码首先使用 Jackson 库将 JSON 转换为一个 Map 对象,其中包含两个 List,分别是 list1 和 list2。
然后,通过遍历 list1 创建树的节点,并使用一个 HashMap 将节点的 id 和节点对象进行关联。
接下来,遍历 list2,根据父节点 id 和子节点 id,从 HashMap 中获取父节点和子节点对象,并将子节点添加到父节点的子节点列表中。
最后,找出根节点(没有父节点的节点)并打印整个树结构。
注意:这里的代码假设 JSON 中的每个节点都有唯一的 id,并且父节点在子节点之前出现。
原文地址: https://www.cveoy.top/t/topic/pltm 著作权归作者所有。请勿转载和采集!