基于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
相关产品推荐
相关产品推荐

