我们说我有以下特定的YAML文件:
task:
container:
image: ubuntu:latest
args: tail
args: -f
args: /dev/null
mounts:
source: /home/testVolume
target: /opt
使用ruby命令ruby -ryaml -rjson -e 'puts JSON.pretty_generate(YAML.load(ARGF))' test.yml > testTab.json
我只得到最后打印的参数:
"task": {
"container": {
"image": "ubuntu:latest",
"args": "/dev/null",
"mounts": {
"source": "/home/testVolume",
"target": "/opt"
}
我的问题是如何打印所有三个args而不是最后一个?
答案 0 :(得分:2)
您的YAML无效。引自YAML spec:
JSON的RFC4627要求映射键只是“应该”是唯一的,而YAML坚持认为它们“必须”。从技术上讲,YAML因此符合JSON规范,选择将重复项视为错误。实际上,由于JSON对此类重复项的语义保持沉默,因此唯一可移植的JSON文件是具有唯一键的文件,因此它们是有效的YAML文件。
在YAML映射中具有多个相同的键是错误的。但是,JSON允许它,因为它只声明它们应该是唯一的。因此,如果实现支持它,则生成的JSON将是有效的,但要注意它不是必需的。
您的问题的答案是:它不起作用,因为您的输入无效YAML。选择在YAML中可表示的结构,然后它将起作用。例如:
task:
container:
image: ubuntu:latest
args:
- tail
- -f
- /dev/null
mounts:
source: /home/testVolume
target: /opt
结果JSON:
{
"task": {
"container": {
"image": "ubuntu:latest",
"args": [
"tail",
"-f",
"/dev/null"
],
"mounts": {
"source": "/home/testVolume",
"target": "/opt"
}
}
}
}