Java递归算法构造JSON树形结构
Posted 数通畅联
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java递归算法构造JSON树形结构相关的知识,希望对你有一定的参考价值。
1.前言
最近项目中有一个需求,数据库中的菜单表是一个常见的id-pid结构,需要把它构建成树形的JSON格式发送给第三方,写出来之后感觉也是很简单的,核心代码只有5行,重要的是思路要明确,这里把源码分享给大家。
工程里面使用了json-lib.jar这个包,作用是将List序列化成JSON。
2.源码
package com.agileai.esb.smc.domain;
import java.util.*;
import net.sf.json.JSONArray;
public class TreeBuilder
List<TreeBuilder.Node>nodes = newArrayList<TreeBuilder.Node>();
public TreeBuilder(List<Node> nodes)
super();
this.nodes= nodes;
/**
* 构建JSON树形结构
* @return
*/
public String buildJSONTree()
List<Node>nodeTree = buildTree();
JSONArrayjsonArray = JSONArray.fromObject(nodeTree);
return jsonArray.toString();
/**
* 构建树形结构
* @return
*/
public List<Node> buildTree()
List<Node>treeNodes = newArrayList<Node>();
List<Node>rootNodes = getRootNodes();
for (Node rootNode : rootNodes)
buildChildNodes(rootNode);
treeNodes.add(rootNode);
return treeNodes;
/**
* 递归子节点
* @param node
*/
public voidbuildChildNodes(Node node)
List<Node> children = getChildNodes(node);
if (!children.isEmpty())
for(Node child : children)
buildChildNodes(child);
node.setMenus(children);
/**
* 获取父节点下所有的子节点
* @param nodes
* @param pnode
* @return
*/
public List<Node> getChildNodes(Nodepnode)
List<Node>childNodes = newArrayList<Node>();
for (Node n : nodes)
if (pnode.getId().equals(n.getPid()))
childNodes.add(n);
return childNodes;
/**
* 判断是否为根节点
* @param nodes
* @param inNode
* @return
*/
public booleanrootNode(Node node)
boolean isRootNode = true;
for (Node n : nodes)
if (node.getPid().equals(n.getId()))
isRootNode= false;
break;
return isRootNode;
/**
* 获取集合中所有的根节点
* @param nodes
* @return
*/
public List<Node> getRootNodes()
List<Node>rootNodes = newArrayList<Node>();
for (Node n : nodes)
if (rootNode(n))
rootNodes.add(n);
return rootNodes;
public staticclass Node
private String id;
private String pid;
private String text;
private String url;
private List<Node> menus;
public Node()
public Node(String id, String pid, Stringtext, String url)
super();
this.id =id;
this.pid =pid;
this.text =text;
this.url =url;
public String getId()
return id;
public voidsetId(String id)
this.id =id;
public String getPid()
return pid;
public voidsetPid(String pid)
this.pid =pid;
public String getText()
return text;
public voidsetText(String text)
this.text =text;
public String getUrl()
return url;
public voidsetUrl(String url)
this.url =url;
public List<Node> getMenus()
return menus;
public voidsetMenus(List<Node> menus)
this.menus= menus;
public staticvoid main(String[] args)
List<Node>nodes = new ArrayList<Node>();
Nodep1 = new Node("01", "","01", "");
Nodep6 = new Node("02", "","02", "");
Nodep7 = new Node("0201", "02","0201", "");
Nodep2 = new Node("0101", "01","0101", "");
Nodep3 = new Node("0102", "01","0102", "");
Nodep4 = new Node("010101", "0101","010101", java中树形结构怎么实现
java代码怎样查出树形结构的某个节点的所有子孙节点?要算法实现!!
JavaScript实现扁平数组结构与JSON树形结构相互转换递归reducecontinuepushconcatfor of