Pretty print JSON
cat data.json | jq '.'
Extract specific field
cat data.json | jq '.name'
Extract nested field
cat data.json | jq '.user.email'
Extract from array
cat data.json | jq '.[0]'
Map over array
cat data.json | jq '.[] | .name'
Filter array
Get users where age > 25:
cat users.json | jq '.[] | select(.age > 25)'
Get specific fields
cat data.json | jq '{name: .name, email: .email}'
Array length
cat data.json | jq '. | length'
Get keys
cat data.json | jq 'keys'
Sort array
cat data.json | jq 'sort_by(.age)'
Reverse array
cat data.json | jq 'reverse'
Group by field
cat data.json | jq 'group_by(.category)'
Unique values
cat data.json | jq '[.[].category] | unique'
Map and select
cat data.json | jq '[.[] | select(.active == true) | .name]'
Conditional logic
cat data.json | jq 'if .age >= 18 then "adult" else "minor" end'
API response parsing
curl -s https://api.example.com/users | jq '.[].email'
Filter by multiple conditions
cat data.json | jq '.[] | select(.age > 20 and .active == true)'
Convert to CSV
cat data.json | jq -r '.[] | [.name, .age, .email] | @csv'
Null handling
cat data.json | jq '.email // "no email"'
Merge objects
jq -s '.[0] * .[1]' file1.json file2.json
Count matches
cat data.json | jq '[.[] | select(.status == "active")] | length'
Raw output (no quotes)
cat data.json | jq -r '.name'
Compact output
cat data.json | jq -c '.'