如何使用 jsonnet 在 YAML 中嵌入文字 json?

How to embed a literal json within a YAML using jsonnet?

这是我试图使用 jsonnet 实现的目标:

version: "v1"
data:
  j.json: |-
    {
      "foo": "bar"
    }

这是我失败的尝试:

local j = {
  foo: "bar"
};

local wrapper = {
  version: "v1",
  data: {
    'j.json': |||
      j
    |||
  }
};

std.manifestYamlDoc(wrapper)

在我的尝试中,我得到了以下结果:

"data":
  "j.json": |
    j
"version": "v1"

怎样才能达到想要的效果?

两件事:

  • 您使用 ||| 表达式构建的多行字符串是文字,与任何其他字符串一样需要 %<blah> 格式运算符
  • 看起来你想要std.manifestJson()那里
  • 我宁愿利用 JSON 作为 YAML 并使用 jsonnet 输出,fwiw 更清晰:

foo.jsonnet:

local j = {
  foo: "bar"
};

local wrapper = {
  version: "v1",
  data: {
    'j.json': std.manifestJson(j)
  }
};

wrapper

jsonnet output:

$ jsonnet foo.jsonnet
{
   "data": {
      "j.json": "{\n    \"foo\": \"bar\"\n}"
   },
   "version": "v1"
}

verifying j.json field with jq

$ jsonnet foo.jsonnet | jq -r '.data["j.json"]' | jq
{
  "foo": "bar"
}