json - 如何在 bash 中将 json 响应转换为 yaml

标签 json bash yaml jq

我用 jq 从一个 json 文件中读取数据。我想将结果附加到 yaml 文件中,但我没有让它工作。我对 shell 编程很陌生。我的目标是将该“用户”附加到 yaml 文件中现有的“用户”数组。

这是我的 json 文件:

#$DEFAULTS_FILE

{"users":
  [
    {"name":"pi",
      "gecos": "Hypriot Pirate",
      "sudo":"ALL=(ALL) NOPASSWD:ALL",
      "shell": "/bin/bash",
      "groups":"users,docker,video",
      "plain_text_passwd":"pi",
      "lock_passwd":"false",
      "ssh_pwauth":"true",
      "chpasswd": {"expire": false}
    },
    {"name":"admin",
      "gecos": "Hypriot Pirate",
      "sudo":"ALL=(ALL) NOPASSWD:ALL",
      "shell": "/bin/bash",
      "primary-group": "users",
      "groups":"users,docker,adm,dialout,audio,plugdev,netdev,video",
      "ssh-import-id":"None",
      "plain_text_passwd":"pi",
      "lock_passwd":"true",
      "ssh_pwauth":"true",
      "chpasswd": "{expire: false}",
      "ssh-authorized-keys": ["ssh-rsa abcdefg1234567890 YOUR_KEY@YOURHOST.local"]
    }
  ]
  }

我用它过滤:

cat $DEFAULTS_FILE | jq.用户

我不知道如何将该 json 转换为 yaml。

我的预期结果应该是:

users:
  - name:                pi
    gecos:               "Hypriot Pirate"
    sudo:                ALL=(ALL) NOPASSWD:ALL
    shell:               /bin/bash
    groups:              users,docker,video
    plain_text_passwd:   pi
    lock_passwd:         false
    ssh_pwauth:          true
    chpasswd: { expire:  false }
  - name:                admin
    primary-group:       users
    shell:               /bin/bash
    sudo:                ALL=(ALL) NOPASSWD:ALL
    groups:              users,docker,adm,dialout,audio,plugdev,netdev,video
    ssh-import-id:       None

我尝试使用名为 yq 的第二个工具,它类似于 jq 并且可以编写 yaml 文件。但是我没有积极的进展。

编辑

我知道我可以用它向 yaml 添加内容:

yq w -i "my.yml""users[+]""一些内容"

但我不知道如何将我的 json 合并到其中。

任何帮助或提示都很好,在此先感谢您......

最佳答案

yq jq

的 yaml 包装器
用yq 4.18.1+
cat "$DEFAULTS_FILE" | yq -P    # or yq --prettyPrint

参见:https://mikefarah.gitbook.io/yq/#notice-for-v4.x-versions-prior-to-4.18.1

使用 yq 4.8.0 版本:

cat $DEFAULTS_FILE | yq e -P -

  • eeval 分别处理文件。 eaeval-all 将首先合并文件。
  • -P--prettyPrint YAML 输出
  • - 来自 STDIN

注意:您也可以采用其他方式(yaml 到 json)yq e -j file.yaml

使用 yq 版本 3.3.2:

cat $DEFAULTS_FILE | yq r -P -

  • r 阅读
  • -P --prettyPrint
  • - 来自 STDIN

关于json - 如何在 bash 中将 json 响应转换为 yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315791/

相关文章:

arrays - 将字符附加到除 bash 数组的最后一个元素之外的每个元素

perl - 无法使用 Dancer::Plugin::Database 连接到多个数据库

Linux shell 脚本 : Using alias in a function

linux - 从 vpnbook.com 自动化 VPN 的 Bash 脚本

F# Yaml 类型提供程序

java - Spring - YML 数组属性为空

json - 如何使用 JSON 更改 LibGDX 中属性对话框的样式?

django - 如何 JSON 序列化 Python 字典?

c# - JSON writer - 替换 xmlwriter?

json - 使用 jq,将任意 JSON 扁平化为分隔符分隔的扁平字典