#!/bin/bash # --- Example JSON Data --- # In a real scenario, this would come from a `curl` or `wget` command. # Example: JSON_DATA=$(curl -s "https://api.example.com/users/123") JSON_DATA='{ "id": "user123", "username": "johndoe", "email": "john.doe@example.com", "isActive": true, "roles": ["admin", "editor"], "address": { "street": "123 Main St", ""city": "Anytown" } }' # --- Pre-check for jq installation --- if ! command -v jq &> /dev/null then echo "Error: 'jq' is not installed. Please install it to run this script." echo " e.g., sudo apt-get install jq (Debian/Ubuntu)" echo " e.g., brew install jq (macOS)" exit 1 fi echo "--- Parsing JSON Data ---" # 1. Extract a single top-level field USERNAME=$(echo "$JSON_DATA" | jq -r '.username') echo "Username: $USERNAME" # 2. Extract a boolean field (will output 'true' or 'false') IS_ACTIVE=$(echo "$JSON_DATA" | jq -r '.isActive') echo "Is Active: $IS_ACTIVE" # 3. Extract an element from an array FIRST_ROLE=$(echo "$JSON_DATA" | jq -r '.roles[0]') echo "First Role: $FIRST_ROLE" # 4. Extract a nested field CITY=$(echo "$JSON_DATA" | jq -r '.address.city') echo "City: $CITY" # 5. Extract multiple fields into a formatted string echo " --- Formatted User Summary ---" USER_SUMMARY=$(echo "$JSON_DATA" | jq -r \ '"User ID: \(.id) Email: \(.email) Roles: \(.roles | join(", "))"') echo -e "$USER_SUMMARY" # 6. Filter and display specific keys, or transform the JSON echo " --- Transformed JSON (ID, Email, City) ---" echo "$JSON_DATA" | jq '{id: .id, email: .email, city: .address.city}' echo " JSON parsing complete."