Terraform中如何合并列表与对象并执行jsonencode
解决方案
要实现列表与单个对象的合并,核心是把单个对象包装成单元素列表后,用concat函数合并两个列表——你之前失败大概率是直接传了单个对象而非列表,导致类型不匹配。
具体实现代码
# 定义本地变量存储中间结果(也可以直接链式调用) locals { # 通过for表达式生成初始列表 generated_items = [for x in var.variable : { "key" : x , "value" : true}] # 把单个对象包装成列表后,和初始列表合并 combined_items = concat(local.generated_items, [{ "key" : "*", "value" : true }]) # 编码为最终JSON final_json = jsonencode(local.combined_items) }
结果验证
当var.variable = [1,2]时,local.final_json的输出为:
[{"key":1,"value":true},{"key":2,"value":true},{"key":"*","value":true}]
为什么之前的方法不适用
merge:用于合并对象(键值对),会按键覆盖值,完全不适合列表合并场景;join:仅用于拼接字符串,不能处理列表元素为对象的情况;concat:要求所有参数都是列表类型,你之前如果直接传入单个对象而非[{...}],会触发类型错误。
内容的提问来源于stack exchange,提问作者Prakhar
相关产品推荐
相关产品推荐

