【问题标题】:Looping through a json file and retrieving the values into bash variables循环遍历 json 文件并将值检索到 bash 变量中
【发布时间】:2020-10-01 04:22:15
【问题描述】:

我有一个包含以下数据的 json 文件

{"Item": {"ID": {"S": "4869949"},"no":{"N": "2"}}}

我需要从 ID 中检索 S 值,从 no 中检索 N 值,并将它们作为参数放入查询中。查询如下所示:

query --table-name validation \
  --key-condition-expression "ID = :v1 AND no = :v2" \
  --expression-attribute-values '{":v1": {"S": "${ID}"},":v2": {"N": "${no}"}}' \
  --region us-east-1

我尝试过使用 jq,但不知道如何读取 json 文件并将值作为参数检索。这是我第一次使用 jq。有人可以帮忙吗?

【问题讨论】:

  • 请格式化您的问题,使其更具可读性

标签: json bash shell scripting jq


【解决方案1】:

以下内容可能并不完全是您所追求的,但确实展示了如何避免多次调用 jq,以及如何部分地由 jq 构造命令。换句话说,假设--key-condition-expression--expression-attribute-values 的模板是固定的,您应该能够根据需要调整以下内容:

假设一个 bash 或类似 bash 的 shell,并且 data.json 包含:

{"Item": {"ID": {"S": "4869949"},"no":{"N": "2"}}}

我们可以写:

ID=ID
no=no

< data.json jq --arg ID "$ID" --arg no "$no" -cr '
  .Item
  | .ID.S as $v1
  | .no.N as $v2
  | $v1, $v2, {($v1): {"S": $ID}, ($v2): {"N": $no}}
' | while read -r v1
do    
  read -r v2
  read -r query

  echo query --table-name validation \
  --key-condition-expression "\"ID = $v1 AND no = $v2\"" \
  --expression-attribute-values "'""$query""'" \
  --region us-east-1
done

jq 作为模板引擎

如果 Q 中带有 :v1 和 :v2 的模板是可变的,那么您可以通过使用 jq 作为模板引擎来调整上述内容,该主题已在 jq Cookbook 中介绍:https://github.com/stedolan/jq/wiki/Cookbook#using-jq-as-a-template-engine

【讨论】:

    【解决方案2】:

    这是基本的 jq 语法:

    $ ID=$(cat data.json | jq .Item.ID.S -r)
    $ no=$(cat data.json | jq .Item.no.N -r)
    $ echo $ID $no
    4869949 2
    

    不过,我建议您阅读 https://shapeshed.com/jq-json/ 之类的内容以更加熟悉。

    【讨论】:

    • 如果我在 JSON 文件中有多个文件,它会起作用吗?因为我想将这些参数即时传递到发电机查询中
    • 提供您的准确 json - 查询需要修改并且取决于布局
    • { "Item": { "ID": { "S": "48699" }, "no": { "N": "2" } } } { "Item": { " ID”:{“S”:“38699”},“否”:{“N”:“5”}}} {“ID”:{“S”:“58699”},“否”:{“N ": "6" } }这是文件将具有的项目类型。每次都必须检索 S,N 值并将它们传递给查询。类似于 java 中的 for/while 循环是否可能?可以使用此 cat check.json 获取所有值 | jq -r '.[] | "(.ID.S)\t(.no.N)"' 但需要一次获取一个值
    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 2014-11-19
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多