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

如何用Python动态创建含同名键的嵌套JSON对象?

用Python动态生成嵌套结构的JSON对象

嘿,我帮你梳理下怎么搞定这个动态生成嵌套JSON的需求~ 这种层层嵌套的结构用递归函数来实现最省心,因为每一层的结构逻辑都是重复的,刚好可以用递归拆解问题。

核心思路

你要的结构是每一层都包含metricExpressionTemplate,里面有布尔类型、PLUS运算符,还有嵌套的表达式节点。我们可以把输入的元素列表逐步拆解,每次把最后一个元素作为当前层的“叶子节点”,剩下的元素递归构建上层的嵌套结构。

代码实现

下面是一个可直接用的示例,我假设输入的元素是指标名称,你可以根据自己的需求调整叶子节点的内容:

import json

def build_nested_expression(elements):
    # 处理0个元素的情况,返回默认结构(可以根据你的需求修改)
    if not elements:
        return {
            "metricExpressionTemplate": {
                "metricExpressionType": "Boolean",
                "operator": {"type": "PLUS"},
                "expression1": {"metricExpressionTemplate": {"metricExpressionType": "Boolean"}}
            }
        }
    # 基线条件:只剩一个元素时,返回叶子节点
    if len(elements) == 1:
        return {
            "metricExpressionTemplate": {
                "metricExpressionType": "Boolean",
                "metricName": elements[0]  # 这里替换成你叶子节点的实际字段
            }
        }
    # 递归构建嵌套结构:当前层的expression1处理剩余元素,expression2处理最后一个元素
    return {
        "metricExpressionTemplate": {
            "metricExpressionType": "Boolean",
            "operator": {"type": "PLUS"},
            "expression1": build_nested_expression(elements[:-1]),
            "expression2": {
                "metricExpressionTemplate": {
                    "metricExpressionType": "Boolean",
                    "metricName": elements[-1]
                }
            }
        }
    }

# 测试用例:3个元素的情况,和你给出的示例结构匹配
input_elements = ["metric_a", "metric_b", "metric_c"]
result = build_nested_expression(input_elements)

# 格式化打印结果,方便查看
print(json.dumps(result, indent=2))

输出效果

运行上面的代码后,会生成符合你需求的嵌套JSON:

{
  "metricExpressionTemplate": {
    "metricExpressionType": "Boolean",
    "operator": {
      "type": "PLUS"
    },
    "expression1": {
      "metricExpressionTemplate": {
        "metricExpressionType": "Boolean",
        "operator": {
          "type": "PLUS"
        },
        "expression1": {
          "metricExpressionTemplate": {
            "metricExpressionType": "Boolean",
            "metricName": "metric_a"
          }
        },
        "expression2": {
          "metricExpressionTemplate": {
            "metricExpressionType": "Boolean",
            "metricName": "metric_b"
          }
        }
      }
    },
    "expression2": {
      "metricExpressionTemplate": {
        "metricExpressionType": "Boolean",
        "metricName": "metric_c"
      }
    }
  }
}

调整说明

  • 如果你的叶子节点也需要包含operator字段,只需要修改基线条件里的字典结构即可
  • 0个元素的处理逻辑可以根据实际业务需求调整,比如返回空结构或者报错
  • 要是你需要用expression1嵌套、expression2作为下一层(而不是叶子),只需要调换递归参数和元素的处理顺序就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:53