bash循环错误:使用jq / bash按属性获取JSON对象

问题描述 投票:0回答:1

我想从Json文件中获取值。哪个在工作

JsonFileToTest

{
  "permissions": [
    {
      "emailid": "[email protected]",
      "rights": "read"
    },
    {
      "emailid": "[email protected]",
      "rights": "read"
    }
  ]
}
readPermissions=($(jq -r '.permissions' JsonFileToTest))

# The command below works perfectly, But when I Put it in a loop, It does not.
#echo ${readPermissions[@]} | jq 'values[].emailid'

for vals in ${readPermissions[@]}
do
   # I would like o extract the email id of the user. The loop is not working atm.  
    echo ${vals[@]} | jq 'values[].emailid'
done

我在这里想念什么?谢谢

bash jq
1个回答
1
投票

如果您really想要这样做,可能看起来像:

readarray -t permissions < <(jq -c '.permissions[]' JsonFileToTest)
for permissionSet in "${permissions[@]}"; do
  jq -r '.emailid' <<<"$permissionSet"
done

[请注意,我们告诉jq为每个项目打印一行(使用-c),并使用readarray -t将每一行读入一个数组元素(与array=( $(...command...) )反模式不同,它不仅在换行符上进行拆分,而且同样在其他空白上,并在此过程中扩展了glob)。


但是没有任何理由做任何事情。只需运行即可获得exact相同的结果:

jq -r '.permissions[].emailid' JsonFileToTest
© www.soinside.com 2019 - 2024. All rights reserved.