使用jq在json字典中首次出现元素



我有以下json:

$ echo '{ "format_id": "250" }{ "format_id": "18" }{ "format_id": "140" }{ "format_id": "18" }{ "format_id": "244" }' | jq .
{
"format_id": "250"
}
{
"format_id": "18"
}
{
"format_id": "140"
}
{
"format_id": "18"
}
{
"format_id": "244"
}

我设法提取了format_ids,它等于"18":

$ echo '{ "format_id": "250" }{ "format_id": "18" }{ "format_id": "140" }{ "format_id": "18" }{ "format_id": "244" }' | jq -r 'select(.format_id=="18")'
{
"format_id": "18"
}
{
"format_id": "18"
}

我想从中提取format_id的第一次出现。

所以我尝试了这里给出的解决方案,但都不起作用,因为我想它们需要以某种方式适应我的输入数据:

$ echo '{ "format_id": "18" }{ "format_id": "18" }' | jq '[.[]|select(.format_id)][0]'
jq: error (at <stdin>:1): Cannot index string with string "format_id"
jq: error (at <stdin>:1): Cannot index string with string "format_id"
$ echo '{ "format_id": "18" }{ "format_id": "18" }' | jq '( map(select(.format_id)) | first  )'
jq: error (at <stdin>:1): Cannot index string with string "format_id"
jq: error (at <stdin>:1): Cannot index string with string "format_id"
$ echo '{ "format_id": "18" }{ "format_id": "18" }' | jq '( first(.[]  | select(.format_id)) )'
jq: error (at <stdin>:1): Cannot index string with string "format_id"
jq: error (at <stdin>:1): Cannot index string with string "format_id"
$ echo '{ "format_id": "18" }{ "format_id": "18" }' | jq 'map(select(.format_id))|.[0]'        
jq: error (at <stdin>:1): Cannot index string with string "format_id"
jq: error (at <stdin>:1): Cannot index string with string "format_id"

你能帮帮我吗?

如果您的jq有inputs,那么最好将其与-n命令行选项和以下jq筛选器结合使用:

first(inputs | select(.format_id =="18"))

如果您的jq没有inputs

然后您必须使用-s命令行选项,例如使用以下筛选器:

first(.[] | select(.format_id =="18"))

这里,使用inputs是优选的,因为它需要更少的RAM。

最新更新