0

这是我尝试使用 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"

怎样才能达到预期的效果?

4

1 回答 1

3

那里有几件事:

  • 您使用表达式构建的多行字符串|||是文字,需要%<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输出:

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

验证j.json字段jq

$ jsonnet foo.jsonnet | jq -r '.data["j.json"]' | jq
{
  "foo": "bar"
}
于 2019-10-16T20:24:55.430 回答