数据库读取树,并处理成json格式

本文介绍了一种将表结构数据转换为树形JSON格式的方法,通过递归算法实现了树节点的构建,并展示了如何通过Java代码实现这一过程。适用于需要将层级数据可视化展示的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表结构:

tableName  parentTable

  A                  B

  A                  C

  B                  D

  B                  E

  C                  F

  C                  G

 

展示树:

            A

   B               C

D     E       F       G

 

 

@Controller
public class ViewLevelMetaController {
   
 private Log logger = LogFactory.getLog(this.getClass());
 private StringBuffer nodeStr=new StringBuffer();

 @Autowired
 private ViewLevelMetaService viewLevelMetaService;
 @Autowired
 private TableTreeService tableTreeService;


 @RequestMapping("/metadata/getViewLevelTableCreateInfo.do")
 public String getViewLevelTableCreateInfo(ModelMap model, String table) {
  logger.info("getViewLevelTableCreateInfo");
  
  List<treeNode> nodeList = tableTreeService.getTreeNodeList();
  //当json字符串为空时才输出,防止重复输出
  if("[]".equals(modifyStr(nodeStr.toString()))){
   getTreeNode(nodeList, new treeNode("A","A"));
  }
  
  model.put("treeNodeStr",modifyStr(nodeStr.toString()));
  
  return "metadata/main";
 }

 /**
  * 修饰一下才能满足Json格式 
  * @param nodeStr
  * @return
  */
 public String modifyStr(String nodeStr){
        return ("["+nodeStr+"]").replaceAll(",]", "]");    
    } 

 /**
  * 把树组装成json格式数据
  *     A
  * B      C
  *
  * [{tableName:'A',url:'null',children:[
  *  {tableName:'B',url:'null',children:null},
  *  {tableName:'C',url:'null',children:null}
  *  ]}]
  * 
  * @param treeNodeList
  * @param node
  */
 private void getTreeNode(List<treeNode> treeNodeList, treeNode node){
   if(hasChild(treeNodeList,node)){   
             nodeStr.append("{tableName:"); 
             nodeStr.append("'"+node.getTableName()+"'"); 
             nodeStr.append(",url:"); 
             nodeStr.append("'"+node.getUrl()+"'"); 
             nodeStr.append(",children:[");   
             List<treeNode> childNodeList = getChildList(treeNodeList,node);   
             for(treeNode childNode:childNodeList){
              getTreeNode(treeNodeList,childNode);
             }
             nodeStr.append("]},");   
         }else{   
             nodeStr.append("{tableName:"); 
             nodeStr.append("'"+node.getTableName()+"'");
             nodeStr.append(",url:"); 
             nodeStr.append("'"+node.getUrl()+"'"); 
             nodeStr.append(",children:null},"); 
         } 
 }

 /**
  * 判断是否有子节点 
  * @param list
  * @param node
  * @return
  */
 private boolean hasChild(List<treeNode> list, treeNode node){
     return getChildList(list,node).size()>0?true:false; 
  }

 /**
  * 得到子节点列表 
  * @param list
  * @param node
  * @return
  */
 private List<treeNode> getChildList(List<treeNode> list , treeNode node){ 
  List<treeNode> li = new ArrayList<treeNode>();  
     for(treeNode l:list){
      if(l.getParentTable().equals(node.getTableName())){
       li.add(l);
      }
     }
     return li;    
     } 



}

 

好的,下面是Java读取MySQL数据库数据封装为JSON文件的代码示例: ```java import java.io.FileWriter; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class MySQLToJson { public static void main(String[] args) { // MySQL数据库连接信息 String url = "jdbc:mysql://localhost:3306/dbname"; String user = "username"; String password = "password"; // JSON文件输出路径 String filePath = "output.json"; // SQL查询语句 String query = "SELECT * FROM tablename"; try { // 加载MySQL驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 获取数据库连接 Connection conn = DriverManager.getConnection(url, user, password); // 创建Statement对象 Statement stmt = conn.createStatement(); // 执行查询 ResultSet rs = stmt.executeQuery(query); // 创建JSON数组对象 JSONArray jsonArray = new JSONArray(); // 遍历结果集 while (rs.next()) { // 创建JSON对象 JSONObject obj = new JSONObject(); // 将查询结果封装为JSON对象 obj.put("id", rs.getInt("id")); obj.put("name", rs.getString("name")); obj.put("age", rs.getInt("age")); // 将JSON对象添加到JSON数组中 jsonArray.add(obj); } // 将JSON数组输出到文件 FileWriter fileWriter = new FileWriter(filePath); fileWriter.write(jsonArray.toJSONString()); fileWriter.flush(); fileWriter.close(); // 关闭连接 rs.close(); stmt.close(); conn.close(); System.out.println("数据功转换为JSON格式保存到文件:" + filePath); } catch (ClassNotFoundException | SQLException | IOException e) { e.printStackTrace(); } } } ``` 这段代码会将MySQL数据库中 `dbname` 数据库中 `tablename` 表中的所有数据读取出来,封装JSON格式保存到 `output.json` 文件中。你可以根据自己的需求修改代码中的数据库连接信息、SQL查询语句以及JSON文件输出路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值