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脚本?
答案 0 :(得分:2)
规范方式:
file='input.json'
cat "$file" | jq -r '.menu | keys[]' |
while IFS= read -r value; do
echo "$value"
done
但你似乎想要一个数组,所以语法是(缺少括号):
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--