gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:12:33 26 4
gpt4 key购买 nike

我用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com