我有以下 JSON 文件inp.json:
{
"x": 0,
"tx": [
{
"id": "a",
"t" : "t for a"
},
{
"id": "b",
"t": "t for b"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想提取“tx”中第一次出现的键“t”的值。
我试过
jq -r .tx <inp.json | jq -r '[0].t'
Run Code Online (Sandbox Code Playgroud)
但收到错误消息
断言“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'
Run Code Online (Sandbox Code Playgroud)
和
... | jq -r '.[0].t'
Run Code Online (Sandbox Code Playgroud)
但前者给出了错误消息jq: error: 语法错误,意外的 IDENT,期待 $end,而后者与我最初的尝试相同的错误。
-r如果输出将被送入另一个 JSON 解析器,则不应使用该选项;只有管道中的最后一个jq 应该使用它 \xe2\x80\x93 否则您将面临将非 JSON 数据输入到第二个 jq 实例的风险。
您的最后一个示例.[0].t似乎是正确的并且适用于 jq 1.6。
$ cat json | jq '.tx' | jq -r '.[0].t'\nt for a\nRun Code Online (Sandbox Code Playgroud)\n但这可以简化为单个 jq 调用,首先逐步增量为:
\n$ cat json | jq -r '.tx | .[0].t'\nt for a\nRun Code Online (Sandbox Code Playgroud)\n然后最后到:
\n$ cat json | jq -r '.tx[0].t'\nt for a\nRun Code Online (Sandbox Code Playgroud)\n