How do I use JQ to select a handful of objects matching an ID in a large json file?

Viewed 35

Say I have a large file of JSON lines (more than 10k) like so:

{"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"}}}

I am trying to use jq to extract only the records whose ticketNumbers are "24656" and "33445". I've tried the following command

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

What have I done wrong here?

But all I get are errors saying "error at .... cannot iterate over string ('...')").

1 Answers

The way you check the ticker number is present in the allowed list, is not quite right, the map(..) and in are not correctly used. You can do something like

["24656", "33445"] as $valid | select(.record.data.ticketNumber | IN($valid[]))

jqplay Demo

Related