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

如何在Python中实现类estraverse的JSON节点遍历与函数执行?

实现类似estraverse的JSON节点遍历工具(Python版)

直接给你写一个通用的JSON节点遍历函数,能递归遍历每个节点并执行你自定义的逻辑,完全满足你要检查JSXText类型节点的需求:

核心遍历函数

def traverse(node, callback):
    # 先对当前节点执行回调
    callback(node)
    
    # 处理对象类型(dict),遍历所有值
    if isinstance(node, dict):
        for value in node.values():
            traverse(value, callback)
    # 处理数组类型(list),遍历每个元素
    elif isinstance(node, list):
        for item in node:
            traverse(item, callback)
    # 基础类型(字符串、数字、布尔、None)无需继续遍历
    else:
        pass

你的需求示例:检查JSXText节点

接下来写你需要的自定义回调函数,筛选type为JSXText且value非空的节点并打印:

def jsx_text_callback(node):
    # 只处理dict类型的节点(因为有type和value属性)
    if isinstance(node, dict):
        node_type = node.get("type")
        node_value = node.get("value", "").strip()
        if node_type == "JSXText" and node_value:
            print(f"找到非空JSXText内容:{node_value}")

调用示例

假设你有这样的JSON对象(模拟AST结构):

sample_ast = {
    "type": "JSXElement",
    "children": [
        {"type": "JSXText", "value": "  这是一段文本  "},
        {"type": "JSXElement", "children": [{"type": "JSXText", "value": ""}]},
        {"type": "JSXText", "value": "另一段非空文本"}
    ]
}

# 执行遍历
traverse(sample_ast, jsx_text_callback)

运行后会输出:

找到非空JSXText内容:这是一段文本
找到非空JSXText内容:另一段非空文本

扩展说明

  • 如果需要控制遍历流程(比如找到目标节点后停止遍历,或者跳过某个节点的子节点),可以让回调函数返回一个控制信号,比如返回False停止遍历,返回skip跳过子节点,修改遍历函数即可:
    def traverse(node, callback):
        result = callback(node)
        if result == "stop":
            return False
        if result == "skip":
            return True
        
        if isinstance(node, dict):
            for value in node.values():
                if not traverse(value, callback):
                    return False
        elif isinstance(node, list):
            for item in node:
                if not traverse(item, callback):
                    return False
        return True
    
  • 这个工具和estraverse的核心逻辑一致:深度优先遍历每个节点,允许你在每个节点上执行自定义操作,完全适配你的JSON/AST节点检查需求。

内容的提问来源于stack exchange,提问作者Big boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:30:07