gpt4 book ai didi

json - Bash Jq解析json字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:34 25 4
gpt4 key购买 nike

我必须以这种方式调用一个文件并传递一个 json 作为参数(假设我的文件名为 test.sh),我需要从 bash 做这样的事情:

./test.sh "[{\"username\":\"user1\",\"password\":\"pwd1\",\"group\":\"usergroup1\"},{\"username\":\"user2\",\"password\":\"pwd2\",\"group\":\"usergroup2\"},{\"username\":\"user3\",\"password\":\"pwd3\",\"group\":\"usergroup3\"}]"

test.sh的内容如下

#!/bin/bash

#read the json
system_user="$1"

printf "$system_user"

accounts=($(jq -s ".[]" <<< $system_user))

printf "$accounts"

for account in "${accounts[@]}"
do
printf "\n\n$account\n\n"
done

-> printf "$system_user"的输出是

[{"username":"user1","password":"pwd1","group":"usergroup1"},{"username":"user2","password":"pwd2","group":"usergroup2"},{"username":"user3","password":"pwd3","group":"usergroup3"}]

但是 -> printf "$accounts"的输出是这样的

[
[
{
“用户名”:
“用户 1”
等等等等。每个 token 一个对象:-(

等等,但我期待的是一个包含三个对象的数组(就像您可以在 jqplay.org 上测试一样)

 {
"username": "user1",
"password": "pwd1",
"group": "usergroup1"
}
{
"username": "user2",
"password": "pwd2",
"group": "usergroup2"
}
{
"username": "user3",
"password": "pwd3",
"group": "usergroup3"
}

通过这种方式,我可以在 ${accounts[@]} 上创建一个 foreach

我做错了什么?谢谢

最佳答案

使用 -c 选项,您可以在一行中打印每个 JSON 对象,从而更轻松地填充您想要的数组。

$ readarray -t arr < <(jq -c '.[]' <<< "[{\"username\":\"user1\",\"password\":\"pwd1\",\"group\":\"usergroup1\"},{\"username\":\"user2\",\"password\":\"pwd2\",\"group\":\"usergroup2\"},{\"username\":\"user3\",\"password\":\"pwd3\",\"group\":\"usergroup3\"}]") 
$ printf "Object: %s\n" "${arr[@]}"
Object: {"username":"user1","password":"pwd1","group":"usergroup1"}
Object: {"username":"user2","password":"pwd2","group":"usergroup2"}
Object: {"username":"user3","password":"pwd3","group":"usergroup3"}

关于json - Bash Jq解析json字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484511/

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