如何使用 JQ 在大型 json 文件中选择与 ID 匹配的少数对象?

Enr*_* Jr 2 jq

假设我有一个很大的 JSON 行文件(超过 10k),如下所示:

{"type": "RECORD", "record": {"stream": "...", "data": {"ticketNumber": "12345"}}}
{"type": "RECORD", "record": {"stream": "...", "data": {"ticketNumber": "23456"}}}
{"type": "RECORD", "record": {"stream": "...", "data": {"ticketNumber": "33445"}}}
{"type": "RECORD", "record": {"stream": "...", "data": {"ticketNumber": "24656"}}}
{"type": "RECORD", "record": {"stream": "...", "data": {"ticketNumber": "15523"}}}
{"type": "RECORD", "record": {"stream": "...", "data": {"ticketNumber": "30030"}}}

Run Code Online (Sandbox Code Playgroud)

我试图jq仅提取 TicketNumbers 为“24656”和“33445”的记录。我尝试过以下命令

cat datafile.json | jq '.record.data | select(.ticketNumber | map(in(["24656", "33445"])))'
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

但我得到的只是错误“错误位于...无法迭代字符串('...')”)。

Ini*_*ian 5

您检查股票代码是否存在于允许列表中的方式不太正确,map(..)并且in未正确使用 和 。你可以做类似的事情

["24656", "33445"] as $valid | select(.record.data.ticketNumber | IN($valid[]))
Run Code Online (Sandbox Code Playgroud)

jqplay演示

  • 留给用户根据自己的意愿进行定制。基本上将配置与实际逻辑分开。他们可以决定将其作为“--argjson”传递或将其用作我的答案。我不喜欢在功能部分内硬编码东西 (3认同)