【问题标题】:How can I put integer as an argument in jq?如何在 jq 中将整数作为参数?
【发布时间】:2016-08-03 19:54:46
【问题描述】:

我一直在尝试使用 jq 来解析从 aws cli 返回的 json 文件,但我遇到了使用索引号引用数组的问题。我需要这样做,因为我想以特定格式导出描述安全组的文本文件,包括所有入站和出站规则。

for (( i=1; i<=groupCount; i++ )) ; 
do
    echo $i
    echo $(echo "$input" | jq --arg i $i '.SecurityGroups[$i]')
done

这会返回一个错误:

1
jq: error (at <stdin>:189): Cannot index array with string "1"

2
jq: error (at <stdin>:189): Cannot index array with string "2"

3
jq: error (at <stdin>:189): Cannot index array with string "3"

有没有办法解决这个问题?

【问题讨论】:

    标签: json jq jsawk


    【解决方案1】:

    您必须使用命令行参数 --argjsonfromjson 过滤器将参数转换为数字。数组只能由整数索引,并且使用--arg 将输入保持为字符串。

    $ jq --argjson i "$i" '.SecurityGroups[$i]'
    $ jq --arg i "$i" '.SecurityGroups[$i|fromjson]'
    

    【讨论】:

    • 请注意,您也可以使用tonumber 代替fromjson
    • 你是个传奇!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多