使用 jq 从 JSON 数组中提取元素

使用 jq 从 JSON 数组中提取元素

我有以下 JSON 文件inp.json

{
 "x": 0,
 "tx": [
  {
   "id":  "a",
   "t" : "t for a"
  },
  {
    "id": "b",
    "t": "t for b"
  }
 ]
}

我想提取“tx”中第一次出现的键“t”的值。

我试过

jq -r .tx <inp.json | jq -r '[0].t'

但收到错误消息

断言“cb == jq_util_input_next_input_cb”失败:文件“/usr/src/ports/jq/jq-1.6-1.x86_64/src/jq-1.6/src/util.c”,第 371 行,函数:jq_util_input_get_position

更新:我也尝试了各种变化

... | jq -r '.[0]t'

... | jq -r '.[0].t'

但前者给出了错误信息jq:错误:语法错误,意外的 IDENT,预期为 $end,后者的错误与我最初的尝试相同。

答案1

-r如果输出将被输入到另一个 JSON 解析器中,则不应使用该选项;只有最后的管道中的 jq 应该使用它——否则您可能会冒着将非 JSON 数据输入第二个 jq 实例的风险。

您的最后一个例子.[0].t似乎是正确的,并且可以与 jq 1.6 一起使用。

$ cat json | jq '.tx' | jq -r '.[0].t'
t for a

但这可以简化为单个 jq 调用,首先逐步执行:

$ cat json | jq -r '.tx | .[0].t'
t for a

最后:

$ cat json | jq -r '.tx[0].t'
t for a

相关内容