【问题标题】:jq: parse and display multiple values in JSONjq:解析并显示 JSON 中的多个值
【发布时间】:2020-12-31 18:47:54
【问题描述】:

我有这个test.json 文件

{
  "list": [
    {
      "expand": "xx",
      "id": "xxxxx",
      "self": "https",
      "key": "test-11",
      "fields": {
        "field_1": "1234"
      }
    },
    {
      "expand": "xx",
      "id": "xxxxx",
      "self": "https",
      "key": "test-10",
      "fields": {
        "field_1": "1235",
        "field_2": null
      }
    }
  ]
}

我正在尝试使用 IFS while 循环读取值:

cat test.json| jq -r '[.list[]| ([.key]|tostring) + "," + "\(.fields| .field_1)"]|@tsv' \
| while IFS="," read -r key field_1; do
echo "$key $field_1"
curl -s https ://thisistest.com/api/$key/$field_1
done;
echo output displays only: test-11

我想获取keyfield_1 的值,以便在curl 请求中使用它们。

【问题讨论】:

  • 试试:jq -r '.list[]|[.key,.fields.field_1]|@tsv' test.json
  • @att ,我已将此问题回滚到以前的版本。您所做的 json 修改导致 json 文件无效,在某些时候使用 ::。此外,如果您还有其他问题,与最初的问题不同,请提出新问题。

标签: bash while-loop jq ifs


【解决方案1】:

@Kev 注释中的jq 命令将提取您想要的值,每行每对,如下所示:

> jq -r '.list[]|[.key,.fields.field_1]|@tsv' test.json
test-11 1234
test-10 1235

您可以通过以下方式修改脚本以针对每个值对发出 curl 请求。

#!/bin/bash
while read -r key field_1; do
    echo curl -s https://thisistest.com/api/$key/$field_1
done < <( jq -r '.list[]|[.key,.fields.field_1]|@tsv' test.json )

如果您的测试没问题,请删除 echo

【讨论】:

  • 谢谢!这有助于获取 field1 值。我也试图获取字段 2 中的名称值 - jq -r '.list[]|[.key,.fields.field_2.name]|@tsv' test.json 但是得到错误不能迭代 null (null)
猜你喜欢
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 2019-10-15
  • 1970-01-01
相关资源
最近更新 更多