以下是一个示例的 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,分别是 list1list2

然后,通过遍历 list1 创建树的节点,并使用一个 HashMap 将节点的 id 和节点对象进行关联。

接下来,遍历 list2,根据父节点 id 和子节点 id,从 HashMap 中获取父节点和子节点对象,并将子节点添加到父节点的子节点列表中。

最后,找出根节点(没有父节点的节点)并打印整个树结构。

注意:这里的代码假设 JSON 中的每个节点都有唯一的 id,并且父节点在子节点之前出现。

Java代码实现 JSON 双列表转换为树结构

原文地址: https://www.cveoy.top/t/topic/pltm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录