如何将参数作为索引传递给jq?

时间:2018-10-02 13:20:52

标签: json parsing jq

嗨,我想访问json数组中的给定元素,如下所示:

$ echo '[  { "CT" : "OS1"  , "VERSION" : "3" } , { "CT" : "OS2"  , "VERSION" : "3" } ]'  | jq '.[1]'
{
  "CT": "OS2",
  "VERSION": "3"
}

但是我想使用变量(将来从环境中使用)替换上面命令中的索引“ 1”,但这会产生错误。

echo '[  { "CT" : "OS1"  , "VERSION" : "3" } , { "CT" : "OS2"  , "VERSION" : "3" } ]'  | jq --arg index 1 '.[$index]'
jq: error (at <stdin>:1): Cannot index array with string "1"

看起来像这样解析后就无法将1解析为数值。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:5)

您可以使用--argjson选项:

jq --argjson index 1 '.[$index]'

jq --help中所述:

  

--argjson a v将变量$a设置为JSON value <v>;

答案 1 :(得分:1)

如果您使用的是jq 1.4或更高版本,则可以使用tonumber函数:

jq --arg index 1 '.[$index | tonumber]'

有关最新版本,请参见oliv's answer