Back to Developer's Study Materials

Consuming Web API JSON Data Using curl and jq: Complete Guide 2026

Learn How to Fetch, Parse, and Process JSON Data from APIs Using curl and jq

Definition: What Is Consuming Web API JSON Data Using curl and jq?

Consuming Web API JSON data using curl and jq refers to the process of fetching JSON data from web APIs using the `curl` command-line tool and then processing, parsing, filtering, and transforming that JSON data using the `jq` JSON processor. This combination provides a powerful, lightweight, and scriptable way to interact with REST APIs, extract specific data, and automate API testing and data processing workflows.

curl (Client URL) is a command-line tool for transferring data to and from servers using various protocols, most commonly HTTP/HTTPS. It's available on virtually all Unix-like systems (Linux, macOS) and Windows. curl allows you to make GET, POST, PUT, DELETE, and other HTTP requests with headers, authentication, and custom options.

jq is a lightweight and flexible command-line JSON processor. It's like `sed`, `awk`, `grep`, and `sort` for JSON data. jq can parse JSON, extract specific fields, filter arrays, transform data structures, and format output. It's written in C and is extremely fast, making it perfect for processing large JSON responses from APIs.

Together, curl and jq form a powerful combination for API consumption: curl fetches the JSON data from the API, and jq processes it. This workflow is commonly used for API testing, data extraction, automation scripts, CI/CD pipelines, and command-line data processing.

Key Point: Consuming Web API JSON data using curl and jq means using curl to fetch JSON from APIs and jq to parse, filter, and transform that JSON. This combination provides a powerful, scriptable, and efficient way to work with APIs from the command line without needing GUI tools or programming languages.

What: Understanding curl and jq for API Consumption

Let's understand what curl and jq offer for API consumption:

curl - HTTP Client

curl is a command-line HTTP client that can:

  • • Make GET, POST, PUT, DELETE requests
  • • Add custom headers and authentication
  • • Send JSON data in request body
  • • Handle cookies and sessions
  • • Follow redirects automatically
  • • Support HTTPS and SSL/TLS

Example: curl -s "https://api.example.com/users"

jq - JSON Processor

jq is a powerful JSON processor that can:

  • • Parse and pretty-print JSON
  • • Extract specific fields and values
  • • Filter arrays and objects
  • • Transform data structures
  • • Combine and merge JSON objects
  • • Format output in various ways

Example: jq ".users[0].name"

Basic Workflow: curl + jq

1
Use curl to fetch JSON from API
2
Pipe curl output to jq
3
jq parses and processes JSON
4
Get formatted, filtered, or transformed output

$ curl -s "https://api.example.com/users" | jq

When: When to Use curl and jq for API Consumption

curl and jq are ideal for API consumption in these scenarios:

✅ API Testing and Debugging

Use curl and jq when you need to quickly test API endpoints, check responses, and debug issues. curl allows you to make requests with different methods, headers, and parameters, while jq helps you inspect and extract specific data from responses.

Example: Testing a new API endpoint, verifying response structure, checking authentication, debugging API errors

✅ Automation Scripts and CI/CD

Use curl and jq in bash scripts, automation workflows, and CI/CD pipelines. They're lightweight, fast, and don't require additional dependencies. Perfect for automated API health checks, data extraction, and integration testing.

Example: Automated API monitoring, health checks, data synchronization, CI/CD pipeline testing

✅ Data Extraction and Processing

Use curl and jq when you need to extract specific data from API responses, transform JSON structures, or filter large datasets. jq's powerful filtering and transformation capabilities make it perfect for data processing tasks.

Example: Extracting user names from API response, filtering data by criteria, transforming JSON structure, generating reports

✅ Command-Line Workflows

Use curl and jq when working from the command line or terminal. They're perfect for developers who prefer CLI tools over GUI applications, work in remote servers, or need to integrate with other command-line tools.

Example: Remote server administration, SSH workflows, terminal-based development, command-line data analysis

✅ Quick API Exploration

Use curl and jq when you need to quickly explore an API, understand its structure, or test different endpoints. They're faster than opening a browser or GUI tool, and jq makes it easy to navigate complex JSON responses.

Example: API documentation exploration, endpoint discovery, response structure analysis, quick API testing

How: Step-by-Step Guide to Using curl and jq

Here's a comprehensive guide to consuming Web API JSON data using curl and jq:

1

Install curl and jq

Most systems come with curl pre-installed. For jq, install it based on your system:

# macOS (using Homebrew)

brew install jq

# Linux (Ubuntu/Debian)

sudo apt-get install jq

# Linux (CentOS/RHEL)

sudo yum install jq

2

Basic API Request with curl

Start with a simple GET request to fetch JSON data:

$ curl -s "https://api.example.com/users"

Flags: `-s` makes curl silent (no progress bar), which is important when piping to jq

3

Pretty Print JSON with jq

Pipe curl output to jq to pretty-print JSON:

$ curl -s "https://api.example.com/users" | jq

Result: jq automatically formats JSON with proper indentation and colors (if terminal supports it)

4

Extract Specific Fields

Use jq filters to extract specific fields from JSON:

# Extract all user names

$ curl -s "https://api.example.com/users" | jq ".users[].name"

# Extract first user's email

$ curl -s "https://api.example.com/users" | jq ".users[0].email"

5

Filter and Transform Data

Use jq to filter arrays and transform data:

# Filter users by age

$ curl -s "https://api.example.com/users" | jq ".users[] | select(.age > 18)"

# Create new object with selected fields

$ curl -s "https://api.example.com/users" | jq ".users[] | {"name": .name, "age": .age}"

6

Add Authentication

Use curl headers for API authentication:

# Bearer token authentication

$ curl -s -H "Authorization: Bearer YOUR_TOKEN" "https://api.example.com/users" | jq

# API key authentication

$ curl -s -H "X-API-Key: YOUR_KEY" "https://api.example.com/users" | jq

Common jq Filters for API Data

FilterDescriptionExample
.Pretty print entire JSONjq .
.fieldAccess object fieldjq .name
.[]Iterate arrayjq .users[]
.[0]First array elementjq .users[0]
select(.condition)Filter by conditionjq "select(.age > 18)"
map(.field)Transform arrayjq "map(.name)"
-rRaw output (no quotes)jq -r .name

Why: Benefits of Using curl and jq for API Consumption

Using curl and jq for consuming Web API JSON data offers several significant benefits:

Fast and Lightweight

curl and jq are extremely fast and lightweight. They don't require heavy GUI applications or complex dependencies. curl is written in C and jq is also written in C, making them much faster than interpreted languages for API requests and JSON processing.

Impact: Process large API responses quickly, use minimal system resources, perfect for automation

Scriptable and Automatable

curl and jq are perfect for automation. They work seamlessly in bash scripts, can be integrated into CI/CD pipelines, and can be combined with other command-line tools. This makes them ideal for automated testing, monitoring, and data processing.

Impact: Automate API testing, integrate into workflows, reduce manual work

Powerful JSON Processing

jq provides powerful JSON processing capabilities. You can filter, transform, extract, and manipulate JSON data in ways that would require complex code in other languages. jq's filter syntax is expressive and allows for complex data transformations.

Impact: Extract specific data easily, transform JSON structures, filter large datasets efficiently

Cross-Platform

curl and jq work on Linux, macOS, Windows (with WSL or Git Bash), and most Unix-like systems. This cross-platform compatibility means you can use the same commands and scripts across different environments, making your workflows portable.

Impact: Consistent workflows across platforms, easy team collaboration, portable scripts

Comparison: curl + jq vs Alternatives

Featurecurl + jqPostmanPython requests
Speed✅ Very Fast⚠️ GUI overhead⚠️ Slower (interpreted)
Automation✅ Excellent⚠️ Limited✅ Good
Dependencies✅ Minimal❌ Heavy app⚠️ Python + libs
JSON Processing✅ Powerful (jq)⚠️ Basic✅ Good
CLI Integration✅ Native❌ GUI only✅ Good

Real-World Examples

Example 1: Fetch and Display User Data

# Fetch users and display names

$ curl -s "https://api.example.com/users" | jq -r ".users[] | .name"

This command fetches user data from an API and extracts just the names, outputting them as plain text (no JSON quotes) thanks to the `-r` flag.

Example 2: Filter and Count Active Users

# Count active users (status = "active")

$ curl -s "https://api.example.com/users" | jq "[.users[] | select(.status == \"active\")] | length"

This command filters users by status, creates an array of active users, and counts them using jq's `length` function.

Example 3: Extract Data with Authentication

# Fetch protected data with Bearer token

$ curl -s -H "Authorization: Bearer $TOKEN" "https://api.example.com/data" | jq ".results"

This command uses environment variable `$TOKEN` for authentication and extracts the `results` field from the API response.

Share this article with Your Friends, Collegue and Team mates

Stay Updated

Get the latest tool updates, new features, and developer tips delivered to your inbox.

No spam. Unsubscribe anytime. We respect your privacy.

Share Your Feedback

Help us improve! Share your thoughts, report bugs, or suggest new features.

Get in Touch

We'd love to hear from you! Write us for any additional feature request, issues, query or appreciation.

Your feedback helps us improve and build better tools for the developer community.