Mac命令行将yaml转换为json

19

有没有一种快速的方法可以将一堆YAML文件转换成JSON文件。我查看了yaml2json,但它无法工作(抛出了一些异常)

谢谢


1
最好共享这些异常。 - Gilles Quénot
6个回答

34

因为最新版本的yq没有答案(除了评论中),所以添加答案。

brew install yq

yq -j eval test.yaml

或者,使用更新的语法:

yq -o=json eval test.yml

8
即使如此也已经过时了。似乎是一个相当不稳定的目标。现在是yq -o=json eval test.yml - danlei

11

请使用来自https://github.com/mikefarah/yq的真正yq(而不是python yq)

brew reinstall yq

然后运行:

/usr/local/bin/yq eval deployment.yaml -o=json -P > deployment.json

参数含义,来自于--help

  -P, --prettyPrint           pretty print, shorthand for '... style = ""'
  -o, --output-format string  [yaml|y|json|j|props|p|xml|x] output format type. (default "yaml") 

r 对我没用,最近的 yq 版本不应该是 eval 吗? - cubuspl42
1
我正在使用较新的版本 yq version 4.7.1,是的,应该使用 eval,而这个版本没有 r 的命令行标志/选项。 - kiran01bm
mikefarah/yq 经历了许多不兼容的 cli 用法/标志更改,我因此受挫而放弃了它。自从使用 JQ 包装器,例如 Blacksmoke16/oqkislyuk/yq(Python pip)以来,一切都非常成功,因为它们只是将其转换为 JSON 并将所有处理传递给 JQ。 - anapsix
我已经编辑了这个答案,使用最新的参数(来自yq v4.25.2)。 - Dawngerpony

5
您可以将您的 YAML 导入到这个(需要安装 pyYAML)。
python -c 'import yaml; import json; import sys; print(json.dumps(yaml.safe_load(sys.stdin)));'

1

使用当前版本的 yq (v4.24.5):

yq eval -o json my.yaml > my.json

请注意,从 4.18.1 开始,当未提供命令时,eval 是默认命令,这意味着这也完全可以正常工作。

yq -o json my.yaml > my.json


0

安装 yq,yaml2json 在 Mac 上无法工作

brew install yq

然后使用它:

yq -o=json test-env.yml > test-env.json

这里的 test-env.json 是输出文件


0
要借用安德鲁的回答,如果你有Python和PyYaml,那么你可以定义一个快速的bash/zsh函数(是的,它在两者上都可以工作):
jconvyamljson(){
    if [[ ! -f $1 ]]; then
        >&2 echo need to provide an existing file to convert
        exit 1
    fi

    cat $1 | python -c 'import yaml; import json; import sys; print(json.dumps(yaml.safe_load(sys.stdin)));' 
}


使用方法非常简单:
如果需要进行格式化/处理,只需将其导入到yaml中即可。

jconvyamljson directive.Usergroup_list.yaml | jq .cssc_table

"table table-striped table-bordered table-condensed"


或者,处理一个丢失的文件:
jconvyamljson this-file-doesnt-exist  | jq .cssc_table
need to provide an existing file to convert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接