使用 bash 属性访问 jq 数组

使用 bash 属性访问 jq 数组

是否可以使用 bash 属性访问 json 数组?

JSON 示例:

{
"data": [
    {
        "id": 1, 
        "name": "John"
    }, 
    {
        "id": 2, 
        "name": "Doe"
    },
    ...
}

Bash 示例,如下所示:

count=0
id=$(cat example.json | jq -r '.data[$count].id')

答案1

只需使用将变量视为已存在的--argjson选项$cntJSON- 编码值:

$ cnt=0
$ jq --argjson cnt "$cnt" '.data[$cnt]' file.json

输出:

{
  "id": 1,
  "name": "John"
}

--argjson name JSON-text:

此选项将 JSON 编码的值作为预定义变量传递给 jq 程序。如果您使用 运行 jq --argjson foo 123,那么 $foo在程序中可用并且具有值123

答案2

使用双引号而不是 single 来允许变量插值:

jq -r ".data[$count].id" example.json

相关内容