What is jq command in linux

Last updated: April 1, 2026

Quick Answer: jq is a command-line JSON processor that parses, filters, and transforms JSON data using a powerful query language, enabling manipulation of JSON files directly from the terminal with Unix-like piping.

Key Facts

What is jq?

jq is a command-line JSON query language and processor designed for parsing, filtering, and transforming JSON data directly from the terminal. It enables system administrators, developers, and data analysts to work with JSON files and API responses efficiently without switching to programming languages or editors. The tool works seamlessly with Unix pipelines, allowing combination with other command-line tools.

Basic Usage and Syntax

The basic syntax is jq 'filter' input.json where the filter describes what data to extract. Simple filters include . (entire object), .fieldname (specific field), .[0] (array element), and .[] (all array elements). For example, jq '.name' users.json extracts the name field from each object in the JSON file.

Filtering and Selection

jq supports conditional filtering to extract specific data. The syntax jq '.[] | select(.age > 30)' filters array elements where age exceeds 30. Pipe operators allow chaining filters: jq '.users | map(.name)' extracts names from a users array. Complex filters can be combined to perform sophisticated data extraction tasks.

Transformation and Restructuring

jq can transform JSON structures entirely. The map() function applies operations to each array element, group_by() groups objects by field values, and sort_by() sorts arrays by specific criteria. Custom objects can be constructed with syntax like jq '{id: .user_id, name: .full_name}', restructuring JSON into different formats.

Working with APIs

jq is particularly useful for processing API responses. Combined with curl, you can fetch and process JSON data: curl https://api.example.com/users | jq '.results | map(.email)'. This extracts email addresses from an API response in a single pipeline, eliminating the need for separate scripts or tools.

Advanced Features

jq supports recursive descent with .. to find all occurrences of a field at any depth, conditional logic with if-then-else, reduce operations for accumulating values, and recursive functions. The @base64 and @uri formatters encode data, while @csv and @json convert formats. String interpolation with \(expression) enables dynamic text generation from JSON data.

Related Questions

How do you install jq on Linux?

jq is available in most Linux package managers. On Ubuntu/Debian, use 'sudo apt-get install jq'. On CentOS/RHEL, use 'sudo yum install jq'. On macOS, use 'brew install jq'. After installation, verify with 'jq --version' to confirm successful installation.

What are common jq filters and operations?

Essential filters include '.' (whole object), '.field' (field extraction), '.[]' (array iteration), 'keys' (object keys), 'length' (count items), 'select()' (conditional filtering), 'map()' (transform arrays), 'sort_by()' (sorting), and 'group_by()' (grouping). These can be combined with pipes for complex operations.

How does jq compare to other JSON processing tools?

jq is more powerful and flexible than tools like grep or sed for JSON processing. Unlike Python one-liners, jq doesn't require a full programming language. It's comparable to dedicated tools like fx or gojq but jq is the most widely adopted standard with the largest community and documentation available.

Sources

  1. jq Official Documentation MIT
  2. Wikipedia - jq CC-BY-SA-3.0
  3. GNU sed Manual for Unix piping context GFDL-1.3