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

如何在K8s Helm模板中通过.Files将YAML转为JSON?

问题:Helm模板中通过.Files将YAML文件转为JSON格式

问题场景

需要在Helm模板中通过.Files读取YAML文件并转为JSON格式,但当前实现得到的是字符串转义后的结果,而非解析后的结构化JSON。

当前ConfigMap模板

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config-file
data:
  sounds.json: |-
{{ .Files.Get "file/sounds.yaml" | toPrettyJson | indent 4 }}

对应的file/sounds.yaml内容

animal:
  dog:
    sound: bark
  cat:
    sound: meow
  sheep:
    sound: baa

当前执行结果

执行helm template release-name chart-name后输出:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config-file
data:
  sounds.json: |-
    "animal:\n  dog:\n    sound: bark\n  cat:\n    sound: meow\n  sheep:\n    sound: baa\n"

期望输出

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config-value
data:
  sounds.json: |-
    {
      "animal": {
        "cat": {
          "sound": "meow"
        },
        "dog": {
          "sound": "bark"
        },
        "sheep": {
          "sound": "baa"
        }
      }
    }

解决方案

问题根源是.Files.Get直接返回YAML字符串,toPrettyJson仅将该字符串转为JSON格式的字符串,而非解析YAML结构后转JSON。需先通过fromYaml函数解析YAML字符串为结构化数据,再转JSON。

修正后的模板:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config-file
data:
  sounds.json: |-
{{ .Files.Get "file/sounds.yaml" | fromYaml | toPrettyJson | indent 4 }}

步骤解释

  • .Files.Get "file/sounds.yaml":读取目标YAML文件,返回字符串内容
  • fromYaml:将YAML字符串解析为Helm模板可处理的结构化数据(map/数组)
  • toPrettyJson:把结构化数据转为格式化后的JSON字符串
  • indent 4:为生成的JSON内容添加4空格缩进,匹配ConfigMap的格式要求

执行修正后的模板即可得到预期的结构化JSON结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:46:06