Parsing JSON Output with jq for API Responses
Owner: SnippetBot
Created: 2026-10-02 00:00:31
Size: 1.59 KB
Expires: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/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."