解析 json 并放入数组
parse json and put in array
我正在尝试解析一个看起来像这样的 JSON 文件,然后尝试将每个字段存储在一个数组中,然后尝试读取它。但是,我认为它会进入无限循环。有人知道我做错了什么吗?
#!/bin/bash
test(){
local file="/Users/f.json"
if [ -f "$file" ]; then
echo "present"
else
echo "absent"
fi
#jq . f.json
while read rule; do
local idd
local username
idd=$(jq --raw-output '.id' <<< ${rule})
username=$(jq --raw-output '.username' <<< ${rule})
#username=$(jq --raw-output '.username')
done
for (( i=0; i<${#idd[@]}; i++ )); do
echo "${idd[i]}"
done
}
test
这里是json:
{
"id": 5679162,
"username": "ryderw1"
}
{
"id": 5679163,
"username": "ryderw3"
}
{
"id": 5679164,
"username": "ryderw4"
}
我想要的 o/p 应该是:
5679162
5679163
5679164
我建议将 jq
的输出读取到数组。
mapfile -t idd < <(jq '.id' /Users/f.json)
declare -p idd
输出:
declare -a idd=([0]="5679162" [1]="5679163" [2]="5679164")
我正在尝试解析一个看起来像这样的 JSON 文件,然后尝试将每个字段存储在一个数组中,然后尝试读取它。但是,我认为它会进入无限循环。有人知道我做错了什么吗?
#!/bin/bash
test(){
local file="/Users/f.json"
if [ -f "$file" ]; then
echo "present"
else
echo "absent"
fi
#jq . f.json
while read rule; do
local idd
local username
idd=$(jq --raw-output '.id' <<< ${rule})
username=$(jq --raw-output '.username' <<< ${rule})
#username=$(jq --raw-output '.username')
done
for (( i=0; i<${#idd[@]}; i++ )); do
echo "${idd[i]}"
done
}
test
这里是json:
{
"id": 5679162,
"username": "ryderw1"
}
{
"id": 5679163,
"username": "ryderw3"
}
{
"id": 5679164,
"username": "ryderw4"
}
我想要的 o/p 应该是:
5679162
5679163
5679164
我建议将 jq
的输出读取到数组。
mapfile -t idd < <(jq '.id' /Users/f.json)
declare -p idd
输出:
declare -a idd=([0]="5679162" [1]="5679163" [2]="5679164")