如何从bash脚本循环json键结果

时间:2018-03-20 11:24:47

标签: json bash jq

input.json: -

{
"menu": {
  "id": "file",
  "value": "File",
  "user": {
    "address": "USA",
    "email": "user@gmail.com"
  }
}
}

命令: -

result=$(cat input.json | jq -r '.menu | keys[]')

结果: -

id
value
user

循环结果: -

for type in "${result[@]}"
do
    echo "--$type--"
done

输出: -

--id
value
user--

我想在循环中处理键值。当我执行上述操作时,结果为单个字符串。

如何使用json键进行循环导致bash脚本?

2 个答案:

答案 0 :(得分:2)

规范方式:

file='input.json'
cat "$file" | jq -r '.menu | keys[]' | 
while IFS= read -r value; do
    echo "$value"
done

bash faq #1

但你似乎想要一个数组,所以语法是(缺少括号):

file='input.json'

result=( $(cat "$file" | jq -r '.menu | keys[]') )

for for type in "${result[@]}"; do
    echo "--$type--"
done

输出:

--id--
--value--
--user--

答案 1 :(得分:2)

使用bash从JSON数据中打印对象键是多余的 Jq 可以自行处理。使用以下简单的 jq 解决方案:

jq -r '.menu | keys_unsorted[] | "--"+ . +"--"' input.json

输出:

--id--
--value--
--user--