You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于JSON路径列表生成JSON树的Java实现方案咨询

基于org.json生成层级JSON树的实现思路

核心逻辑

遍历所有JSON路径,将每个路径按.拆分层级节点,从根节点开始逐层构建JSON对象,最终把每个路径的末端节点映射为空字符串值。

具体实现步骤

  • 拆分路径节点:对每个路径字符串(如customer.name),用split("\\.")拆分成节点数组(["customer", "name"])。
  • 逐层构建结构:维护一个根JSONObject,遍历拆分后的节点数组:
    • 若当前节点不是最后一层,检查父对象中是否存在该节点,不存在则创建新的JSONObject,并进入下一层继续处理;
    • 若当前节点是最后一层,直接在父对象中设置键值对为节点名: ""。
  • 处理顶层节点:对于无层级的路径(如nr),直接在根对象中添加nr: ""。

代码示例

import org.json.JSONObject;
import java.util.List;

public class JsonTreeGenerator {
    public static JSONObject generateTree(List<String> paths) {
        JSONObject root = new JSONObject();
        
        for (String path : paths) {
            String[] nodes = path.split("\\.");
            JSONObject currentNode = root;
            
            for (int i = 0; i < nodes.length; i++) {
                String nodeKey = nodes[i];
                if (i == nodes.length - 1) {
                    currentNode.put(nodeKey, "");
                } else {
                    if (!currentNode.has(nodeKey)) {
                        currentNode.put(nodeKey, new JSONObject());
                    }
                    currentNode = currentNode.getJSONObject(nodeKey);
                }
            }
        }
        
        return root;
    }

    public static void main(String[] args) {
        List<String> targetPaths = List.of("customer.name", "customer.phone", "shop.address", "nr");
        JSONObject resultTree = generateTree(targetPaths);
        // 格式化输出JSON结构
        System.out.println(resultTree.toString(2));
    }
}

关于JsonPath的补充

当前场景下直接拆分字符串就能完成需求,无需依赖com.jayway.jsonpath。如果后续要处理更复杂的路径(如带数组索引的路径),可以用JsonPath的Path解析器来拆解路径节点,但对当前的简单层级路径来说,字符串拆分效率更高、实现更简洁。

内容的提问来源于stack exchange,提问作者Anamaria Dragomir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:10:27