递归将树转化成json字符串

Tree.java:

package tree;

import java.util.ArrayList;
import java.util.List;

class Node {
	private int data;
	private Node parent;
	private List<Node> children = new ArrayList<Node>();
	private Node rightSibling;
	
	public Node(int data) {
		this.data = data;
	}
	public int getData() {
		return data;
	}
	public void setData(int data) {
		this.data = data;
	}
	public Node getParent() {
		return parent;
	}
	public void setParent(Node parent) {
		this.parent = parent;
	}
	public List<Node> getChildren() {
		return children;
	}
	public void setChildren(List<Node> children) {
		this.children = children;
	}
	public Node getRightSibling() {
		return rightSibling;
	}
	public void setRightSibling(Node rightSibling) {
		this.rightSibling = rightSibling;
	}
}

public class Tree {
	private Node root;
	private StringBuffer buffer = new StringBuffer();
	
	public void init(Node root) {
		this.root = root;
	}
	
	public Node getRoot() {
		return this.root;
	}
	
	public void printTree() {
		convert(this.root);
		System.out.println(buffer.toString());
	}
	
	private void convert(Node node) {
		buffer.append("{\"data\":" + node.getData());
		
		if(node.getChildren().size() == 0) {
			buffer.append(",\"children\":null}");
			return;
		}
		else {
			buffer.append(", \"children\":[");
			for(Node n : node.getChildren()) {
				convert(n);
				buffer.append(",");
			}
			buffer = buffer.deleteCharAt(buffer.lastIndexOf(","));
			buffer.append("]}");
		}
	}
}


TreeMain.java:

package tree;

import java.util.List;

public class TreeMain {
	public static void main(String[] args) {
		Node root = new Node(10);
		root.setData(10);
		
		Node n1 = new Node(1);
		Node n2 = new Node(2);
		Node n3 = new Node(3);
		
		n1.setParent(root);
		n2.setParent(root);
		n3.setParent(root);
		
		List<Node> list = root.getChildren();
		list.add(n1);
		list.add(n2);
		list.add(n3);
		root.setChildren(list);
		
		n1.setRightSibling(n2);
		n2.setRightSibling(n3);
		
		//======================================
		
		Node n4 = new Node(4);
		Node n5 = new Node(5);
		
		n4.setParent(n1);
		n5.setParent(n1);
		
		list = n1.getChildren();
		list.add(n4);
		list.add(n5);
		n1.setChildren(list);
		
		n4.setRightSibling(n5);
		
		//======================================
		
		Node n6 = new Node(6);
		Node n7 = new Node(7);
		
		n6.setParent(n2);
		n7.setParent(n2);
		
		list = n2.getChildren();
		list.add(n6);
		list.add(n7);
		n2.setChildren(list);
		
		n6.setRightSibling(n7);
		
		
		Tree tree = new Tree();
		tree.init(root);
		tree.printTree();
		
		System.out.println("\n" + root.getChildren().get(0).getRightSibling().getData());
	}
}


运行结果:

{"data":10, "children":[{"data":1, "children":[{"data":4,"children":null},{"data":5,"children":null}]},{"data":2, "children":[{"data":6,"children":null},{"data":7,"children":null}]},{"data":3,"children":null}]}

2


在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方法来处理每个子节点。最后,将结果转换为字符串形式并返回。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值