我有以下 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