【问题标题】:convert yaml to json in bash using perl使用 perl 在 bash 中将 yaml 转换为 json
【发布时间】:2020-10-04 19:00:16
【问题描述】:

我正在尝试使用 perl 将 yaml 字符串转换为 bash 中的 json(不幸的是它必须是这样的)并且遇到了问题。 当我将它写入一个临时文件并转换它时它可以工作,但不幸的是我没有足够的 perl 经验来改变它以使用 bash 变量来执行相同的操作。 我需要这样做,因为我想经常转换许多文件,并且总是创建临时文件很慢/效率低,在我的情况下也是一个安全问题。

这是处理临时文件的命令:

jsonfile=$(perl -MYAML::XS=LoadFile -MJSON::XS=encode_json -e 'for (@ARGV) { for (LoadFile($_)) { print encode_json($_),"\n" } }' ${tempfile} )

我可以以某种方式将其更改为类似的东西吗?

jsonfile=$(echo "${yaml_string}" | perl .....)

我稍微更改了参数并尝试了类似的方法,但输出完全不同且无法使用:

jsonfile=$(echo "${yaml_string}" | perl -MYAML::XS=Load -MJSON::XS=encode_json -e 'for (<>) { for (Load($_)) { print encode_json($_),"\n" } }')

我们将不胜感激。

【问题讨论】:

  • 如果你安装了 JSON::XS 和 [YAML::XS,你可以使用 JSON::XS 在其发行版中引入的 [json_xs 命令行实用程序。无需自己动手:json_xs -f yaml -t json &lt;input.yml 从文件中读取 STDIN。其他答案给出的所有解决方案都适用于此,它只是减少了您的 Perl 代码。

标签: json bash perl yaml data-conversion


【解决方案1】:

如果您使用bash 作为您的shell,您可以将yaml 变量的内容提供为herestring,而不是通过管道输出echo

perl -MYAML::XS -MJSON::XS -0777 -E 'say encode_json(Load(<>))' <<<"${yaml_string}"

-0777switch 是一个 perl 约定,告诉 &lt;&gt;/readline 将其所有输入作为单个值读取,而不是一次读取一行。

【讨论】:

  • 如果你可以安装yq,我会选择更简单的yq read - -jP &lt;&lt;&lt;"${yaml_string}"
【解决方案2】:

使用参数:

# sh, bash
perl -MYAML::XS -MJSON::XS -e'CORE::say encode_json(Load($ARGV[0]))' -- "$yaml_string"

使用环境变量:

# sh, bash
yaml_string="$yaml_string" perl -MYAML::XS -MJSON::XS -e'CORE::say encode_json(Load($ENV{yaml_string}))'

# sh, bash
export yaml_string
perl -MYAML::XS -MJSON::XS -e'CORE::say encode_json(Load($ENV{yaml_string}))'

使用标准输入:

# sh, bash
printf '%s' "$yaml_string" | perl -MYAML::XS -MJSON::XS -0777e'CORE::say encode_json(Load(<>))'

# bash
perl -MYAML::XS -MJSON::XS -0777e'CORE::say encode_json(Load(<>))' <<<"$yaml_string"

# bash
perl -MYAML::XS -MJSON::XS -0777e'CORE::say encode_json(Load(<>))' <( printf '%s' "$yaml_string" )

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2015-04-11
    • 2016-02-16
    相关资源
    最近更新 更多