如何使用 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"
}
这是我试图使用 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 withjq
$ jsonnet foo.jsonnet | jq -r '.data["j.json"]' | jq
{
"foo": "bar"
}