javar实现json树形结构
时间: 2024-04-30 17:18:13 浏览: 108
可以使用以下步骤来实现JSON树形结构:
1. 解析JSON字符串,将其转换为JSON对象。
2. 创建根节点。
3. 遍历JSON对象,将每个键值对转换为一个节点,并将其添加到根节点下。
4. 对于每个节点,如果对应的值是一个对象或数组,则递归地调用步骤3,将其添加为该节点的子节点。
5. 将根节点作为树的根,返回根节点。
以下是一个示例代码:
```java
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JsonTree {
public static TreeNode buildTree(String jsonString) {
JSONObject json = JSONObject.parseObject(jsonString);
TreeNode root = new TreeNode("root");
buildSubTree(root, json);
return root;
}
private static void buildSubTree(TreeNode parentNode, Object obj) {
if (obj instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) obj;
for (String key : jsonObject.keySet()) {
TreeNode node = new TreeNode(key);
parentNode.addChild(node);
buildSubTree(node, jsonObject.get(key));
}
} else if (obj instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) obj;
for (int i = 0; i < jsonArray.size(); i++) {
TreeNode node = new TreeNode("[" + i + "]");
parentNode.addChild(node);
buildSubTree(node, jsonArray.get(i));
}
} else {
String value = obj.toString();
TreeNode node = new TreeNode(value);
parentNode.addChild(node);
}
}
public static void main(String[] args) {
String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\",\"cars\":[{\"name\":\"Ford\",\"models\":[\"Fiesta\",\"Focus\",\"Mustang\"]},{\"name\":\"BMW\",\"models\":[\"320\",\"X3\",\"X5\"]},{\"name\":\"Fiat\",\"models\":[\"500\",\"Panda\"]}]}";
TreeNode root = buildTree(jsonString);
root.print();
}
}
class TreeNode {
private String name;
private List<TreeNode> children;
public TreeNode(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public void addChild(TreeNode child) {
children.add(child);
}
public void print() {
print(0);
}
private void print(int level) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < level; i++) {
sb.append(" ");
}
sb.append(name);
System.out.println(sb.toString());
for (TreeNode child : children) {
child.print(level + 1);
}
}
}
```
这里使用了阿里巴巴的 fastjson 库来解析 JSON 字符串,并且将树节点用一个 TreeNode 类来表示,该类包含节点名称和子节点列表。在 buildTree 方法中,我们首先将 JSON 字符串解析为 JSONObject,然后创建根节点,最后通过递归调用 buildSubTree 方法来构建子树。在 buildSubTree 方法中,我们判断当前节点对应的值类型,如果是 JSONObject 或 JSONArray,则递归构建其子节点;否则,直接将其作为叶子节点添加到当前节点下。最后调用根节点的 print 方法来输出树形结构。
阅读全文