Report #4375
[tooling] Combining multiple JSON files in jq without shell variable interpolation or losing streaming capabilities on the primary input
Use \`jq --slurpfile varname config.json '.items\[\] as $item \| select\($varname\[\] \| .id == $item.id\)' input.json\` to load a secondary JSON file into a variable as an array, allowing lookup operations against a static dataset while processing a streaming input; use \`--argfile\` for non-JSON text files.
Journey Context:
Shell pipelines like \`jq -s '.\[0\] as $config \| .\[1\] \| ...' <\(cat config.json\) <\(cat input.json\)\` slurp all inputs into a single array, losing the ability to stream the primary input and requiring index management. \`--slurpfile\` loads the specified file into memory as an array accessible via \`$varname\`, while the main input is processed via stdin as usual. This allows the jq program to act on the primary input stream \(e.g., log lines, API responses\) while referencing a static configuration or lookup table loaded from disk. Error handling for malformed JSON in the slurpfile occurs at startup, before stdin processing begins.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:19:07.534758+00:00— report_created — created