json数据在javaFx的TreeViewer展示(仿jsonViewer)

本文介绍了一种将JSON数据转换为树形结构的方法,并通过Java实现。该方法递归地遍历JSON对象或数组,创建对应的树节点。适用于将复杂的JSON数据结构可视化,方便进行数据浏览和操作。

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


import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TreeItem;

import java.util.Set;


public class JsonTreeUtils {
    public static TreeItem<Entity> createNode(final Entity je) {
        return new TreeItem<Entity>(je) {

            private boolean isLeaf;

            // We do the children and leaf testing only once, and then set these
            // booleans to false so that we do not check again during this
            // run. A more complete implementation may need to handle more
            // dynamic file system situations (such as where a folder has files
            // added after the TreeView is shown). Again, this is left as an
            // exercise for the reader.
            private boolean isFirstTimeChildren = true;
            private boolean isFirstTimeLeaf = true;

            @Override
            public boolean isLeaf() {
                if (isFirstTimeLeaf) {
                    isFirstTimeLeaf = false;
                    Entity e = (Entity) getValue();
                    isLeaf = e.getJsonElement().isJsonPrimitive();
                }
                return isLeaf;
            }

            @Override
            public ObservableList<TreeItem<Entity>> getChildren() {
                if (isFirstTimeChildren) {
                    isFirstTimeChildren = false;

                    // First getChildren() call, so we actually go off and
                    // determine the children of the File contained in this TreeItem.
                    super.getChildren().setAll(buildJsonChildren(this));
                }
                return super.getChildren();
            }


            private ObservableList<TreeItem<Entity>> buildJsonChildren(TreeItem<Entity> jsonElementTreeItem) {
                JsonElement f = jsonElementTreeItem.getValue().getJsonElement();
                if (f != null && f.isJsonArray()) {
                    JsonArray asJsonArray = f.getAsJsonArray();
                    if (asJsonArray != null) {
                        ObservableList<TreeItem<Entity>> children = FXCollections.observableArrayList();
                        for (int i = 0; i < asJsonArray.size(); i++) {
                            JsonElement subChild = asJsonArray.get(i);
                            children.add(createNode(new Entity(String.valueOf(i), subChild)));
                        }
                        return children;
                    }
                } else if (f != null && f.isJsonObject()) {
                    ObservableList<TreeItem<Entity>> children = FXCollections.observableArrayList();
                    JsonObject jo = f.getAsJsonObject();
                    Set<String> sets = jo.keySet();
                    for (String key : sets) {
                        JsonElement jsonElement = jo.get(key);
                        children.add(createNode(new Entity(key, jsonElement)));
                    }
                    return children;
                }
                return FXCollections.emptyObservableList();
            }
        };
    }
jsonTreeView.setRoot(root);
无图无真相
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大巨魔战将

如果对您有帮助,请打赏1分钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值