[英]Iterate over a json using shell
我有以下格式的json。 我想遍歷這個json文件
{
"atest_engine": { "version": "96" },
"a_kdfvm": { "version": "68" },
"aseft_api": { "version": "" },
"push_psservice": { "version": "68" },
}
我嘗試了jq實用程序,我的腳本如下。
count=$( jq '. | length' test.json )
echo $count
for((i=0;i<$count;i++))
do
name=$(cat test.json | jq '.|keys['${i}']')
version=$(cat test.json | jq '.|keys['${i}'].version')
echo $name
echo $version
done
我的計數和名稱正確,但是無法獲取版本信息。 我怎么才能得到它。 我是腳本的新手,在此方面的任何幫助都將不勝感激。
首先,您的JSON示例似乎格式不正確-push_psservice行后面帶有逗號,但這很可能是拼寫錯誤。
您可能會發現使用jq的to_entries將對象的字段轉換為數組更容易(請參閱https://stackoverflow.com/a/24254365/4513656 ),例如:
to_entries | .[0].key
to_entries | .[0].value.version
在https://jqplay.org/上嘗試。
{
"atest_engine": { "version": "96" },
"a_kdfvm": { "version": "68" },
"aseft_api": { "version": "" },
"push_psservice": { "version": "68" }
}
jq -r 'to_entries[] | "\(.key)\t\(.value.version)"' input.json |
while read name version
do
echo "name:" $name
echo "version:" $version
done
name: atest_engine
version: 96
name: a_kdfvm
version: 68
name: aseft_api
version:
name: push_psservice
version: 68
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.