java 递归反序列化树形json数据
时间: 2023-06-21 21:08:53 浏览: 229
下面是一个 Java 递归反序列化树形 JSON 数据的示例代码:
```java
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonTreeDeserializer {
private static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) {
String json = "{\"id\":1,\"name\":\"root\",\"children\":[{\"id\":2,\"name\":\"child1\",\"children\":[{\"id\":3,\"name\":\"grandchild1\"},{\"id\":4,\"name\":\"grandchild2\"}]},{\"id\":5,\"name\":\"child2\",\"children\":[{\"id\":6,\"name\":\"grandchild3\"},{\"id\":7,\"name\":\"grandchild4\"}]}]}";
try {
JsonNode rootNode = mapper.readTree(json);
Node tree = deserialize(rootNode);
System.out.println(tree);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Node deserialize(JsonNode node) {
int id = node.get("id").asInt();
String name = node.get("name").asText();
Node tree = new Node(id, name);
JsonNode childrenNode = node.get("children");
if (childrenNode != null && childrenNode.isArray()) {
for (JsonNode childNode : childrenNode) {
Node child = deserialize(childNode);
tree.addChild(child);
}
}
return tree;
}
}
class Node {
private int id;
private String name;
private List<Node> children;
public Node(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<Node>();
}
public void addChild(Node node) {
this.children.add(node);
}
@Override
public String toString() {
return "Node [id=" + id + ", name=" + name + ", children=" + children + "]";
}
}
```
这个示例代码使用了 Jackson 库来进行 JSON 反序列化。首先读取 JSON 数据,然后递归地反序列化每个节点,并构建树形结构。最后输出树形结构。
阅读全文