簡體   English   中英

使用shell遍歷json

[英]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/上嘗試。

input.json

{
     "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM