json mysql 树状_树形JSON列表怎么利用java与mysql进行拼接

本文介绍如何使用Java处理从MySQL获取的树形JSON列表数据。首先,通过查询获取扁平化的目录列表,然后利用递归方法将数据转换为树形结构。在Controller中调用相关方法,将数据转化为所需格式的JSON字符串。
摘要由CSDN通过智能技术生成

树形JSON列表怎么利用java与mysql进行拼接

发布时间:2020-12-01 16:41:16

来源:亿速云

阅读:68

作者:Leah

树形JSON列表怎么利用java与mysql进行拼接?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

例如:[

{

"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 nodes = new ArrayList<>();

public String buildTree(List nodes) {

TreeBuilder treeBuilder = new TreeBuilder(nodes);

return treeBuilder.buildJSONTree();

}

public TreeBuilder() {

}

public TreeBuilder(List nodes) {

super();

this.nodes = nodes;

}

// 构建JSON树形结构

public String buildJSONTree() {

List nodeTree = buildTree();

JSONArray jsonArray = JSONArray.fromObject(nodeTree);

return jsonArray.toString();

}

// 构建树形结构

public List buildTree() {

List treeNodes = new ArrayList<>();

List rootNodes = getRootNodes();

for (Node rootNode : rootNodes) {

buildChildNodes(rootNode);

treeNodes.add(rootNode);

}

return treeNodes;

}

// 递归子节点

public void buildChildNodes(Node node) {

List children = getChildNodes(node);

if (!children.isEmpty()) {

for (Node child : children) {

buildChildNodes(child);

}

node.setChildren(children);

}

}

// 获取父节点下所有的子节点

public List getChildNodes(Node pnode) {

List 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 getRootNodes() {

List 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 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 getChildren() {

return children;

}

public void setChildren(List children) {

this.children = children;

}

}

}

在Controller中的调用方法是:@RequestMapping("/bulidJsonTree")

@ResponseBody

public String buildJsonTree(HttpServletRequest request) {

// 获取全部目录节点

List 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();

看完上述内容,你们掌握树形JSON列表怎么利用java与mysql进行拼接的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值