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

Terraform如何动态查询jsondecode加载JSON的指定路径取值

Terraform 动态路径查询嵌套JSON值方案

无需硬编码最大嵌套深度,也无需开发自定义Provider,使用Terraform内置的reduce函数即可实现任意层级的动态取值,适配Terraform 0.15及以上所有版本(含1.x全系列稳定版)。

实现代码

locals {
  # 修正原示例的写法问题:jsondecode接收JSON格式字符串,需要先用file()读取目标文件内容
  tree = jsondecode(file("${path.module}/file.json"))
  # 动态查询路径,支持任意长度:对象属性传字符串key,数组下标传数字索引即可
  query_path = ["some1", "path1", "key1"]

  # 核心取值逻辑
  value = reduce(
    local.query_path,
    local.tree,
    (curr, seg) -> try(curr[seg], null)
  )
}

逻辑说明

  • reduce函数会遍历传入的路径数组,将完整解码后的JSON结构作为初始迭代值
  • 每轮迭代以当前所在节点为基础,取下一段路径对应的子节点;通过try做容错处理,任意一段路径不存在时直接返回null,不会触发执行错误
  • 该方案没有深度限制,无论JSON嵌套多少层都可以正常取值,同时兼容对象和数组结构:例如路径写为["list_key", 2, "attr"]时,可以直接取到数组索引为2的元素的attr属性值。

低版本适配

如果使用0.15以前没有reduce函数的Terraform版本,除了你提到的硬编码层级方案外,没有原生的无深度限制实现方式,优先建议升级Terraform版本使用上述方案。硬编码方案需要提前预估业务场景的最大嵌套深度,冗余度高且容易出现超出预设深度的取值失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:06:24