• 字符窜转节点并打印节点树或转JSON


    我司目前有一个这样子需求:数据库存储的是一条条记录,有一列是存储的目录结构的字符窜,如下:

    xxxx公司/yy网区/zz电局/变电/bcdef/220kV石西站/主变区域/#2主变间隔/#2主变/#2主变

    要把这些转化为JSON传给前端,下面是一些

      1 package com.xx.yyyy;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 
      6 /**
      7  * <p> Test </p>
      8  *
      9  * @author Aion.Liu
     10  * @version v1.0.0
     11  * @since 2020/6/23 2:26 下午
     12  */
     13 public class Test {
     14 
     15     public void parseString() {
     16 
     17         NodTree nodeTree = new NodTree();
     18         nodeTree.setNodeValue("root");
     19 
     20         String str0 = "XX电网公司/XX网区/XX供电局/变电/aa巡维班/220kV111/主变区域/#2主变间隔/#2主变/#2主变";
     21         String str1 = "xx电网公司/XX网区/XX供电局/变电/bb巡维班/220kV222/主变区域/#1主变间隔/#1主变压器/#1主变";
     22         ... 43         String str23 = "XX电网公司/XX网区/XX供电局/变电/cc巡维班/220kV333/主变区域/#1主变间隔/#1主变/#1主变";
     44         String str24 = "XX电网公司/XX网区/XX供电局/变电/dd巡维班/220kV333/主变区域/#2主变间隔/#2主变/#2主变";
     45 
     46         String str25 = "YY电网公司/XX网区/XX供电局/变电/ee巡维班/220kV444/主变区域/#2主变间隔/#2主变/#2主变";
     47 
     48         List<String> stringList = new ArrayList<>();
     49         stringList.add(str0);
     50         stringList.add(str1);
     51         ... 73         stringList.add(str24);
     74         stringList.add(str25);
     75 
     76         for (String str : stringList) {
     77             addNode(nodeTree, str.split("/"));
     78         }
     79 
     80 //        print(nodeTree, 0);
     81 
     82         nodeTree.toJson(nodeTree);
     83 
     84         System.out.println(nodeTree.getBuffer());
     85 
     86     }
     87 
     88 
     89 
     90 
     91     public void addNode(NodTree nodeTree, String[] strArr) {
     92         NodTree creatNodeTree = null;
     93         NodTree queryNode = null;
     94         NodTree parentNode = nodeTree;
     95         for (String str : strArr) {
     96             queryNode = parentNode.hasSubNode(str);
     97             if (null == queryNode) {
     98                 creatNodeTree = new NodTree();
     99                 creatNodeTree.setNodeValue(str);
    100                 parentNode.addSunNode(creatNodeTree);
    101 
    102                 parentNode = creatNodeTree;
    103             } else {
    104                 parentNode = queryNode;
    105             }
    106         }
    107     }
    108 
    109 
    110 
    111     class NodTree {
    112 
    113         String nodeValue = null;
    114 
    115         List<NodTree> nodeList = new ArrayList<NodTree>();
    116 
    117         StringBuffer buffer = new StringBuffer();
    118 
    119         public String getNodeValue() {
    120             return nodeValue;
    121         }
    122 
    123         public void setNodeValue(String nodeValue) {
    124             this.nodeValue = nodeValue;
    125         }
    126 
    127         public List<NodTree> getNodeList() {
    128             return nodeList;
    129         }
    130 
    131         public void setNodeList(List<NodTree> nodeList) {
    132             this.nodeList = nodeList;
    133         }
    134 
    135         public void addSunNode(NodTree nodeTree) {
    136             nodeList.add(nodeTree);
    137         }
    138 
    139         public StringBuffer getBuffer() {
    140             return buffer;
    141         }
    142 
    143         public void setBuffer(StringBuffer buffer) {
    144             this.buffer = buffer;
    145         }
    146 
    147         public NodTree hasSubNode(String str) {
    148             if (null != nodeList && !nodeList.isEmpty()) {
    149                 for (NodTree nodeTree : nodeList) {
    150                     if (nodeTree.nodeValue.equals(str)) {
    151                         return nodeTree;
    152                     }
    153                 }
    154             }
    155             return null;
    156         }
    157 
    158         /**
    159          * 节点树打印
    160          * @param nodeTree 节点树
    161          * @param w
    162          */
    163         public void print(NodTree nodeTree, int w) {
    164             for (int i = 0; i < w; i++) {
    165                 System.out.print(" ");
    166             }
    167             System.out.println("|-" + nodeTree.nodeValue);
    168             for (NodTree tree : nodeTree.getNodeList()) {
    169                 print(tree, w + 1);
    170             }
    171         }
    172 
    173 
    174         /**
    175          * 节点树 转 JSON
    176          * @param nodeTree 节点树
    177          */
    178         public void toJson(NodTree nodeTree) {
    179             buffer.append("{"data":" + """ + nodeTree.getNodeValue() + """);
    180             if (nodeTree.getNodeList().size() == 0) {
    181                 buffer.append(","children":null}");
    182                 return;
    183             } else {
    184                 buffer.append(", "children":[");
    185                 for (NodTree n : nodeTree.getNodeList()) {
    186                     toJson(n);
    187                     buffer.append(",");
    188                 }
    189                 buffer = buffer.deleteCharAt(buffer.lastIndexOf(","));
    190                 buffer.append("]}");
    191             }
    192         }
    193     }
    194 
    195 
    196     public static void main(String[] args) {
    197         Test t = new Test();
    198         t.parseString();
    199     }
    200 }

     

    执行结果转换查看:

    理解数据格式后,才能更好的转换成为json提供给前端使用。

  • 相关阅读:
    terraform入门操作指南
    linux常用命令
    pssh用法范例
    nginx共享内存使用
    Redis监控指标[转]
    xargs用法笔记
    systemd用法记录一
    esxcli部分常用命令
    lua自定义功能模块table类型转string类型
    curl用法笔记
  • 原文地址:https://www.cnblogs.com/yuchuan/p/node_tree_json.html
Copyright © 2020-2023  润新知