我有一些原来是 JSON 的大型 YAML 文件,因此它们采用 YAML 流样式。例如
{
"foo":
{
# Some comment
"bar": "baz", # Another comment
"qux" : [
1,
2,
3
]
},
# ...
}
我想将它们转换为 YaML 块样式,保留注释和(如果可能)对象键排序。例如
foo:
# Some comment
bar: baz # Another comment
qux:
- 1
- 2
- 3
# ...
这可行吗?
这是绝对可行的;我可以立即想到两种方法。如果您是熟练的编码员,则可以使用您选择的语言读取现有的 YAML 文件,然后以正确的格式写出文件。
或者,您可以使用您喜欢的文本编辑器删除多余的字符等并清理文件。不过可能会很辛苦。
最后一个选项,我不推荐但我觉得我有义务提及,是使用正则表达式来转换文件。这可能是可能的,但会非常复杂。我建议选择A。
我刚刚踩了你的帖子,你可以用这句话达到想要的结果:
sed --regexp-extended 's/#(.*)/"commnet": "\1",/g' <YOUR INPUT FILE> \
| yq --input-format json --output-format yaml \
| sed --regexp-extended "s/comment\: '(.*)'/#\1/g"
细分:
sed --regexp-extended 's/#(.*)/"comment": "\1",/g'
- 将所有评论转换为 json 有效的内容,这样 yq 就不会抱怨,yq --input-format json --output-format yaml
- 使用 yq,sed --regexp-extended "s/comment\: '(.*)'/#\1/g"
- 将评论转换回 # ...
形式。可能的坑是你输入的 JSON 中的任何
comment
字段都会被转换为 # ...
。