java怎么递归拼接衣服串_Java递归拼接json树形结构

最近在项目开发过程中遇到一个问题,前台需要用到echarts组件中的旭日图来显示层级关系,这就需要我将后台Sql查询出来的json数组拼接成多级嵌套的树形结构返回前台 ,类似于

62795af393b5588417a9eeb7015f2d5c.png

d2ed20adaae81e5156fa7b9393932a8d.png

而我从数据库中查出来的数据是这样的:

{"prog_level_id_1":"5","prog_level_id_2":"10010","prog_level_id_3":"20400","prog_level_name_1":"生活服务类","prog_level_name_2":"普通商业广告","prog_level_name_3":"家具装饰类","prog_level_name_4":"装饰","prog_level_name_5":"美好生活","prog_level_id_4":"38000","prog_level_id_5":"1100000"}

解决方法:

设计一个类表示属性,存储相关信息

public class ProgNode {

private String id;

private String name;

public ProgNode() {

}

public ProgNode(String id, String name, String level) {

super();

this.id = id;

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public List getChild(){

//。。。。。。。部分代码省略

String prog_id = "**";

String prog_name = "***";

String sql = " *****"; //这里的sql根据父级id查找相关的子属性

JSONArray jsonArray = new JSONArray();

jsonArray = CrateJDBCUtil.getInstance().executeQuery(sql);

ListprogNodes= new ArrayList();

if(jsonArray.size()>0){

for (int i = 0;i < jsonArray.size();i++){

ProgNode node = new ProgNode()

String progId = jsonArray.getJSONObject(i).getString(prog_id);

String progName = jsonArray.getJSONObject(i).getString(prog_name);

if(progId != null && progId != ""){

node.setId(progId);

node.setName(progName);

progNodes.add(node);

}

}

}

return progNodes; //返回一个集合

}

}

然后:我们先查找第一级属性,就是没有上级节点的属性,获取他们的编号,名称

public JSONArray getResult(){

//查询一级属性id

String prog1 = "select distinct prog_id_1,prog_name_1\n" +

"from bm.tplt_monthly_info";

JSONArray jsonArray = new JSONArray();

jsonArray = CrateJDBCUtil.getInstance().executeQuery(prog1);

ListprogNodes= new ArrayList();

for (int i = 0;i < jsonArray.size();i++){

ProgNode node = new ProgNode();

node.setId(jsonArray.getJSONObject(i).getString("prog_level_id_1"));

node.setName(jsonArray.getJSONObject(i).getString("prog_level_name_1"));

progNodes.add(node);

}

JSONArray rtJA = new JSONArray();

rtJA = getChildInfo(progNodes); //根据一级查找子级

return rtJA;

}

递归循环查找子级属性。

public JSONArray getChildInfo(ListprogNodes){

JSONArray rtJA = new JSONArray();

for(ProgNode prog :progNodes){

int level = Integer.parseInt(prog.getLevel());

ListprogList = new ArrayList();

if(level < 5){

progList =prog.getChild();//查询该属性下的子属性

}

JSONObject jsonObject = new JSONObject();

jsonObject.put("id",prog.getId());

jsonObject.put("name",prog.getName());

if(progList.size()>0){//如果该属性还有子属性,继续做查询,直到该属性没有孩子,也就是最后一个节点

jsonObject.put("children", getChildInfo(progList));

}

rtJA.add(jsonObject);

}

return rtJA;

}

以上就实现了树形json的拼接。

参考资料:

java递归实现json树结构,附带js实现树结构:子父节点

java+mysql递归拼接树形JSON列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,如果要拼接树形结构JSON字符串,可以使用递归的方式来实现。假设我们有一个树形结构的数据,每个节点包含一个值和子节点列表。 首先,我们创建一个递归方法,该方法接受一个节点作为参数,并返回一个字符串表示该节点及其子节点的JSON字符串。在方法中,我们首先创建一个StringBuilder对象用于拼接最终的结果。 然后,我们将当前节点的值转换为JSON格式的字符串,并将其添加到StringBuilder对象中。接下来,我们检查当前节点是否有子节点,如果有,则递归调用该方法处理每个子节点,并将结果添加到StringBuilder对象中。 最后,我们在方法的结尾处返回StringBuilder对象的字符串表示形式。 以下是一个示例代码: ``` import com.google.gson.Gson; public class JsonTreeBuilder { public static void main(String[] args) { // 创建树形结构数据 // 构造节点 Node node3 = new Node("Node 3"); Node node4 = new Node("Node 4"); Node node2 = new Node("Node 2", node3, node4); Node node1 = new Node("Node 1", node2); // 将树形结构转换为JSON字符串 String jsonString = buildJsonString(node1); System.out.println(jsonString); } public static String buildJsonString(Node node) { StringBuilder sb = new StringBuilder(); // 添加节点值 sb.append("{ \"value\": \"" + node.getValue() + "\", "); // 添加子节点列表 sb.append("\"children\": ["); for (int i = 0; i < node.getChildren().size(); i++) { sb.append(buildJsonString(node.getChildren().get(i))); if (i < node.getChildren().size() - 1) { sb.append(", "); } } sb.append("] }"); return sb.toString(); } } class Node { private String value; private List<Node> children; public Node(String value, Node... children) { this.value = value; this.children = Arrays.asList(children); } public String getValue() { return value; } public List<Node> getChildren() { return children; } } ``` 上述代码使用了一个Node类来表示树形结构的节点,每个节点包含一个value属性和一个children属性,用于存储子节点列表。在示例代码的main方法中,我们创建了一个树形结构的数据,并将其转换为JSON字符串。 在buildJsonString方法中,我们使用StringBuilder对象拼接JSON字符串。首先,我们添加节点的值,并添加一个children属性,然后遍历所有的子节点,并递归调用buildJsonString方法来处理每个子节点。最后,将结果转换为字符串形式并返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值