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

如何在Kubernetes ConfigMap的YAML中编写缩进JSON并转为单行存储

问题原因

YAML的折叠块标量(>-)规则是:将换行符替换为空格,但如果后续行的缩进比块的起始缩进更深,换行会被保留。你的buy.json所有行的缩进与块起始缩进一致,因此被折叠成单行;而sell.json的行缩进更深,所以保留了换行和缩进格式。

解决方案

方案1:纯原生YAML实现(推荐)

在>-后添加缩进级别数字,告诉YAML将所有超过该级别的缩进行统一折叠成单行。例如针对sell.json,将>-改为>2-(这里的2是块内容相对于父键sell.json的缩进数量):

apiVersion: v1
kind: ConfigMap
metadata:
  name: transactions
  namespace: default
data:
  buy.json: >-
    [
    {
    "quanitity": 10,
    "price": 100,
    "name": "apple"
    },
    {
    "quanitity": 20,
    "price": 200,
    "name": "banana"
    }
    ]
  sell.json: >2-
    [
      {
        "quanitity": 8,
        "price": 105,
        "name": "apple"
      },
      {
        "quanitity": 20,
        "price": 204,
        "name": "banana"
      }
    ]

应用后,sell.json会被自动转换为单行JSON字符串,同时YAML文件内的JSON仍保持缩进可读性。

方案2:Helm渲染(适合Helm管理场景)

如果用Helm管理K8s资源,可以在values.yaml中定义结构化的YAML数据,再通过toJson函数转换为单行JSON:

values.yaml

transactions:
  sellData:
    - quanitity: 8
      price: 105
      name: apple
    - quanitity: 20
      price: 204
      name: banana

ConfigMap模板

apiVersion: v1
kind: ConfigMap
metadata:
  name: transactions
  namespace: default
data:
  buy.json: >-
    [
    {
    "quanitity": 10,
    "price": 100,
    "name": "apple"
    },
    {
    "quanitity": 20,
    "price": 200,
    "name": "banana"
    }
    ]
  sell.json: {{ toJson .Values.transactions.sellData | quote }}

Helm渲染后会自动生成单行JSON,兼顾配置可读性和存储需求。

方案3:命令行快速生成

如果不需要保留YAML文件的多行格式,可通过jq将多行JSON转为单行后创建ConfigMap:

kubectl create configmap transactions \
  --from-literal=buy.json='[{"quanitity":10,"price":100,"name":"apple"},{"quanitity":20,"price":200,"name":"banana"}]' \
  --from-literal=sell.json="$(jq -c . << 'EOF'
[
  {
    "quanitity": 8,
    "price": 105,
    "name": "apple"
  },
  {
    "quanitity": 20,
    "price": 204,
    "name": "banana"
  }
]
EOF
)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:45:25