文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-05-31 08:26

关注

树形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;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();

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯