【问题标题】:jq parsing value with extension .tgz扩展名为 .tgz 的 jq 解析值
【发布时间】:2018-11-27 09:18:32
【问题描述】:

我正在尝试使用正则表达式获取文件扩展名“.tgz”的值。但得到 jq 错误。

json_var=[ { "Key": "raw/bene/test/nd_OneP4.tgz" }, { "Key": "raw/bene/test/nd_OneP4.tgz" } ]

echo $json_var | jq -r ' .[] | to_entries | map(select(.key | test("*.tgz")).value)'

Jq 错误:

jq: error (at <stdin>:1): number (0) cannot be matched, as it is not a string

【问题讨论】:

  • 我试过这个但没有得到任何结果 echo $json_var | jq'.[] |选择(.id| tostring |test(".*.(tgz$)|(tar.gz$)")) | .key'
  • 黑客警报!如果将所有双引号替换为换行符,则可以轻松找到以tgz 结尾的行。

标签: python json shell jq


【解决方案1】:

首先,在设置json_var时,需要对字符串进行引用:

json_var='[ { "Key": "raw/bene/test/nd_OneP4.tgz" }, { "Key": "raw/bene/test/nd_OneP4.tgz" } ]'

第二,不用to_entries:你要测试的字符串可以通过.Key访问:

echo $json_var |
  jq -r ' .[] | select(.Key | test("\\.tgz$")).Key'

还要注意test 的参数必须是正则表达式的 JSON 表示。

第三,至少在您的特定情况下,以上可以简化为:

echo $json_var | 
  jq -r ' .[][] | select( test("\\.tgz$"))'

【讨论】:

    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多