如何用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
相关产品推荐
相关产品推荐

