如何避免Helm将values.yaml中的JSON数组转换为map存入ConfigMap
问题根因
你遇到的格式转换是Helm的默认行为:Helm加载values.yaml时会先把其中的JSON/YAML结构解析为Go原生数据类型(你的配置会被解析为[]map[string]interface{}类型的切片),直接对该类型的值使用quote过滤器时,会触发Go的默认字符串序列化逻辑,最终输出map[xxx]格式的内容。
解决方案
有两种常用方案可以解决这个问题,按需选择即可:
方案1:使用
toJson过滤器序列化(推荐)
直接用Helm内置的toJson函数,将解析后的Go对象重新序列化为标准JSON格式,修改你的模板逻辑如下:data: {{- range $key, $val := .Values.configs }} {{ $key }}: {{ $val | toJson }} {{- end }}如果需要强制将输出作为字符串包裹引号,也可以叠加
quote过滤器:{{ $val | toJson | quote }},该方案的优势是保留了结构化数据的可操作性,你依然可以在模板中对数组内的元素做二次处理。方案2:values中直接定义为字符串
如果你不需要在模板中操作该数组的内部元素,可以直接在values.yaml中将该数组定义为字符串类型,避免Helm将其解析为Go对象:key: '[{A:a, 1:2}, {B:b, 3:4}, {C:c, 5:6}]'这种场景下原有模板逻辑不需要做任何修改即可正常渲染。
内容的提问来源于stack exchange,提问作者ChrisP
相关产品推荐
相关产品推荐

