BASH

Extract Data from JSON Files using jq

A bash script demonstrating how to parse and extract specific data from JSON files or API responses using the powerful `jq` command-line JSON processor.

#!/bin/bash

# --- Example JSON Data ---
# For demonstration, we'll create a temporary JSON file.
# In a real scenario, this could be an API response or a config file.
JSON_DATA='{
  "name": "My Web App",
  "version": "1.2.3",
  "status": "active",
  "services": [
    {"id": "api", "port": 3000, "protocol": "http"},
    {"id": "db", "port": 5432, "protocol": "postgres"}
  ],
  "config": {
    "env": "production",
    "debug": false
  }
}'

TEMP_JSON_FILE=$(mktemp /tmp/json_example.XXXXXX.json)
echo "${JSON_DATA}" > "${TEMP_JSON_FILE}"

# --- Using jq to extract data ---
echo "--- Extracting 'name' ---"
jq -r '.name' "${TEMP_JSON_FILE}"

echo "
--- Extracting 'version' and 'status' (comma-separated) ---"
jq -r '"\(.version), \(.status)"' "${TEMP_JSON_FILE}"

echo "
--- Extracting all service IDs ---"
jq -r '.services[].id' "${TEMP_JSON_FILE}"

echo "
--- Extracting 'port' of the service with id 'api' ---"
jq -r '.services[] | select(.id == "api") .port' "${TEMP_JSON_FILE}"

echo "
--- Extracting all keys from 'config' ---"
jq -r '.config | keys[]' "${TEMP_JSON_FILE}"

echo "
--- Filtering JSON based on condition (services with port > 3000) ---"
jq '.services[] | select(.port > 3000)' "${TEMP_JSON_FILE}"

# Clean up temporary file
rm "${TEMP_JSON_FILE}"
How it works: This script demonstrates how to effectively parse and extract specific pieces of information from JSON data using `jq`, a powerful command-line JSON processor. It covers selecting individual fields, array elements, filtering arrays based on conditions, and extracting nested values, which is highly useful for processing API responses or configuration files.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs