Я вызвать файл и передать JSON в качестве параметров таким образом (предположу, что мой файл называется test.sh), от Баша мне нужно сделать что-то вроде этого:Bash Jq разбор JSON строка
./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 «$ счета» это что-то вроде этого
[
[
{
«имя пользователя»:
«user1»
и т.д. и т.п. один объект для каждого маркера: - (
и так далее, но то, что я ожидал, что это массив из трех объектов (например, вы можете проверить на jqplay.org)
{
"username": "user1",
"password": "pwd1",
"group": "usergroup1"
}
{
"username": "user2",
"password": "pwd2",
"group": "usergroup2"
}
{
"username": "user3",
"password": "pwd3",
"group": "usergroup3"
}
Таким образом, я могу сделать foreach на $ {accounts [@]}
Что я делаю неправильно? Спасибо
'jq '. []' <<<" ... "' (без '-s') дает желаемый результат; вы можете подумать о том, почему вы считаете, что вам нужен массив 'bash', чтобы держать это в первую очередь. В зависимости от того, что вы хотите * делать * с данными, вы можете сделать это прямо в 'jq'. – chepner