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

如何解析JSON逻辑结构并通过中序遍历生成对应逻辑表达式语句?

实现思路
  • 先定义统一的树节点结构
    所有节点统一抽象为包含left(左子节点/左值)、right(右子节点/右值)、val(当前节点操作符/内容)三个属性的结构,非叶子节点的left和right为子节点对象,叶子节点的left、right为具体的字段值字符串。
  • 递归解析JSON生成树结构
    输入的JSON是天然嵌套的结构,直接用递归方法逐层解析即可,解析逻辑按操作符类型区分:
    1. 每次取当前JSON对象的唯一key,即为当前节点的操作符val
    2. 如果当前操作符是AND/OR:它的参数是数组,数组的第一个元素递归解析后作为当前节点的left子节点,第二个元素递归解析后作为当前节点的right子节点;如果数组长度大于2,可两两递归组合生成嵌套的二元节点即可
    3. 如果当前操作符是EQUALS:它的参数是长度为1的键值对,取键名作为当前节点的left值,键值作为当前节点的right值,不需要继续递归
  • 调用现有中序遍历方法输出结果
    解析完成后得到的根节点直接传入你已经实现的中序遍历方法即可,遍历过程中每输出一个非叶子节点的逻辑结果,就用括号包裹,避免优先级错乱。

示例代码(Python)

class Node:
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def json_to_tree(json_obj):
    # 取当前对象唯一的key作为操作符
    op = list(json_obj.keys())[0]
    params = json_obj[op]
    if op in ("AND", "OR"):
        # 二元逻辑操作符,左右子节点递归解析
        left_node = json_to_tree(params[0])
        right_node = json_to_tree(params[1])
        # 如果要和你示例输出的顺序一致,把左右节点调换即可:
        # return Node(op, right_node, left_node)
        return Node(op, left_node, right_node)
    elif op == "EQUALS":
        # 等于操作符,左右为具体字段值
        k = list(params.keys())[0]
        v = params[k]
        return Node(op, left=k, right=v)

# 中序遍历生成逻辑语句的示例(可替换为你已实现的方法)
def inorder_traverse(node):
    if isinstance(node.left, Node):
        left_str = inorder_traverse(node.left)
    else:
        left_str = str(node.left)
    if isinstance(node.right, Node):
        right_str = inorder_traverse(node.right)
    else:
        right_str = str(node.right)
    return f"({left_str} {node.val} {right_str})"

# 测试
import json
input_json = json.loads('''
{
  "AND": 
     [ 
       {"OR": [ { "EQUALS" : {"X":"Y"} }, { "EQUALS": {"Z":"W"} } ]},
       {"EQUALS" : {"A": "B"} } 
     ]
}
''')
root = json_to_tree(input_json)
# 调换左右节点后输出和你预期完全一致的结果:( ( X EQUALS Y OR Z EQUALS W ) AND A EQUALS B )
print(inorder_traverse(root))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:15:01