前言

本文给大家介绍的是关于利用java+mysql递归实现拼接树形JSON列表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:
我们在做Java web项目时,前端控件例如国家-省-市-区-县等树形列表,常常需要多级树形json数据
例如:
[
{
"name": "商品目录",
"pid": "-1",
"id": "1",
"children": [
{
"name": "日用品",
"pid": "1",
"id": "11",
"children": [
{
"name": "洗发水",
"pid": "11",
"id": "111",
"children": [
{
"name": "霸王",
"pid": "111",
"id": "1111",
"children": []
}
]
}
]
},
{
"name": "食品",
"pid": "1",
"id": "12",
"children": []
}
]
}
]
整体思路分为两步,第一步获取目录及其所有子目录,获取后的列表形式如下:
[
{"id":"1","pid":"-1","name":"商品目录"},
{"id":"11","pid":"1","name":"日用品"},
{"id":"12","pid":"1","name":"食品"},
{"id":"111","pid":"11","name":"洗发水"},
{"id":"1111","pid":"111","name":"霸王"}
]
第二步,利用递归思想拼装该数据,拼装方法的工具类如下:
package *.*.*;
import net.sf.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
/**
* 构造目录JSON树
* Created by fukang on 2017/5/26 0026.
*/
public class TreeBuilder {
List<Node> nodes = new ArrayList<>();
public String buildTree(List<Node> nodes) {
TreeBuilder treeBuilder = new TreeBuilder(nodes);
return treeBuilder.buildJSONTree();
}
public TreeBuilder() {
}
public TreeBuilder(List<Node> nodes) {
super();
this.nodes = nodes;
}
// 构建JSON树形结构
public String buildJSONTree() {
List<Node> nodeTree = buildTree();
JSONArray jsonArray = JSONArray.fromObject(nodeTree);
return jsonArray.toString();
}
// 构建树形结构
public List<Node> buildTree() {
List<Node> treeNodes = new ArrayList<>();
List<Node> rootNodes = getRootNodes();
for (Node rootNode : rootNodes) {
buildChildNodes(rootNode);
treeNodes.add(rootNode);
}
return treeNodes;
}
// 递归子节点
public void buildChildNodes(Node node) {
List<Node> children = getChildNodes(node);
if (!children.isEmpty()) {
for (Node child : children) {
buildChildNodes(child);
}
node.setChildren(children);
}
}
// 获取父节点下所有的子节点
public List<Node> getChildNodes(Node pnode) {
List<Node> childNodes = new ArrayList<>();
for (Node n : nodes) {
if (pnode.getId().equals(n.getPid())) {
childNodes.add(n);
}
}
return childNodes;
}
// 判断是否为根节点
public boolean rootNode(Node node) {
boolean isRootNode = true;
for (Node n : nodes) {
if (node.getPid().equals(n.getId())) {
isRootNode = false;
break;
}
}
return isRootNode;
}
// 获取集合中所有的根节点
public List<Node> getRootNodes() {
List<Node> rootNodes = new ArrayList<>();
for (Node n : nodes) {
if (rootNode(n)) {
rootNodes.add(n);
}
}
return rootNodes;
}
public static class Node {
private String id;
private String pid;
private String name;
private List<Node> children;
public Node() {
}
public Node(String id, String pid, String name) {
super();
this.id = id;
this.pid = pid;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Node> getChildren() {
return children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
}
}
在Controller中的调用方法是:
@RequestMapping("/bulidJsonTree")
@ResponseBody
public String buildJsonTree(HttpServletRequest request) {
// 获取全部目录节点
List<Node> nodes = iGoodsDirSvc.getAllDirList();
// 拼装树形json字符串
String json = new TreeBuilder().buildTree(nodes);
return json;
}
其中iGoodsDirSvc.getAllDirList()方法需要将取到的数据转为Node类型:
String hql = "select id as id,pId as pid,name as name from Directory"; Query query = factory.getCurrentSession().createQuery(hql) .setResultTransformer(Transformers.aliasToBean(TreeBuilder.Node.class)); return query.list();
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# java
# 递归解析json
# mysql
# 递归树形结构
# json
# 递归
# Java递归遍历树形结构的实现代码
# java后端把数据转换为树
# map递归生成json树
# 返回给前端(后台转换)
# java无限递归遍历json对象问题
# 的是
# 商品目录
# 相关内容
# 给大家
# 这篇文章
# 谢谢大家
# 多说
# 两步
# 第二步
# 判断是否
# 有疑问
# fukang
# Created
# util
# ArrayList
# List
# sf
# JSONArray
# return
相关文章:
如何构建满足综合性能需求的优质建站方案?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何通过商城自助建站源码实现零基础高效建站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何快速生成凡客建站的专业级图册?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何在云虚拟主机上快速搭建个人网站?
如何用IIS7快速搭建并优化网站站点?
建站之星会员如何解锁更多建站功能?
制作宣传网站的软件,小红书可以宣传网站吗?
,制作一个手机app网站要多少钱?
建站VPS能否同时实现高效与安全翻墙?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何在宝塔面板创建新站点?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
制作营销网站公司,淘特是干什么用的?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
制作企业网站建设方案,怎样建设一个公司网站?
网站制作公司,橙子建站是合法的吗?
*服务器网站为何频现安全漏洞?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
高防服务器租用指南:配置选择与快速部署攻略
北京网站制作公司哪家好一点,北京租房网站有哪些?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
建站主机数据库如何配置才能提升网站性能?
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何快速打造个性化非模板自助建站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
深圳网站制作案例,网页的相关名词有哪些?
名字制作网站免费,所有小说网站的名字?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何安全更换建站之星模板并保留数据?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何用腾讯建站主机快速创建免费网站?
定制建站策划方案_专业建站与网站建设方案一站式指南
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在阿里云虚拟服务器快速搭建网站?
临沂网站制作公司有哪些,临沂第四中学官网?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
网站制作报价单模板图片,小松挖机官方网站报价?
宝塔新建站点报错如何解决?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
广州建站公司哪家好?十大优质服务商推荐
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
*请认真填写需求信息,我们会在24小时内与您取得联系。