Drill 01: Fundamentals
Identity filter, object access, arrays, and type checking. The foundation.
Run This Drill
bash ~/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/examples/jq-drills/01-fundamentals.sh
Drill Script
#!/bin/bash
# JQ DRILL 01: FUNDAMENTALS
# Paste this entire script into your terminal
# Topics: Identity, object access, arrays, types
cat << 'EOF' > /tmp/jq-01.json
{
"hostname": "ise-01",
"ip": "10.50.1.20",
"port": 443,
"enabled": true,
"roles": ["pan", "mnt", "psn"],
"config": {
"domain": "inside.domusdigitalis.dev",
"version": "3.3",
"patches": ["patch1", "patch2", "patch3"]
},
"interfaces": [
{"name": "eth0", "ip": "10.50.1.20", "vlan": 50},
{"name": "eth1", "ip": "10.50.10.20", "vlan": 10}
]
}
EOF
echo "=================================================================="
echo " JQ DRILL 01: FUNDAMENTALS "
echo "=================================================================="
echo ""
echo "Test file: /tmp/jq-01.json"
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.1: IDENTITY FILTER"
echo "The simplest filter: . returns the entire input unchanged"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.' /tmp/jq-01.json"
jq '.' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.2: OBJECT ACCESS"
echo "Use .key to access object properties"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.hostname' /tmp/jq-01.json"
jq '.hostname' /tmp/jq-01.json
echo ""
echo "Command: jq '.ip' /tmp/jq-01.json"
jq '.ip' /tmp/jq-01.json
echo ""
echo "Command: jq '.port' /tmp/jq-01.json"
jq '.port' /tmp/jq-01.json
echo ""
echo "Command: jq '.enabled' /tmp/jq-01.json"
jq '.enabled' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.3: NESTED ACCESS"
echo "Chain .key.subkey for nested objects"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.config' /tmp/jq-01.json"
jq '.config' /tmp/jq-01.json
echo ""
echo "Command: jq '.config.domain' /tmp/jq-01.json"
jq '.config.domain' /tmp/jq-01.json
echo ""
echo "Command: jq '.config.version' /tmp/jq-01.json"
jq '.config.version' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.4: ARRAY ACCESS"
echo "Use .array[] to iterate, .array[n] for index"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.roles' /tmp/jq-01.json"
jq '.roles' /tmp/jq-01.json
echo ""
echo "Command: jq '.roles[]' /tmp/jq-01.json"
echo "(Each element on its own line)"
jq '.roles[]' /tmp/jq-01.json
echo ""
echo "Command: jq '.roles[0]' /tmp/jq-01.json"
jq '.roles[0]' /tmp/jq-01.json
echo ""
echo "Command: jq '.roles[-1]' /tmp/jq-01.json"
echo "(Negative index = from end)"
jq '.roles[-1]' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.5: ARRAY OF OBJECTS"
echo "Common pattern: .array[].field"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.interfaces[]' /tmp/jq-01.json"
jq '.interfaces[]' /tmp/jq-01.json
echo ""
echo "Command: jq '.interfaces[].name' /tmp/jq-01.json"
jq '.interfaces[].name' /tmp/jq-01.json
echo ""
echo "Command: jq '.interfaces[].ip' /tmp/jq-01.json"
jq '.interfaces[].ip' /tmp/jq-01.json
echo ""
echo "Command: jq '.interfaces[0].vlan' /tmp/jq-01.json"
jq '.interfaces[0].vlan' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.6: RAW OUTPUT (-r)"
echo "Remove quotes from string output"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.hostname' /tmp/jq-01.json"
echo "(With quotes)"
jq '.hostname' /tmp/jq-01.json
echo ""
echo "Command: jq -r '.hostname' /tmp/jq-01.json"
echo "(Raw - no quotes)"
jq -r '.hostname' /tmp/jq-01.json
echo ""
echo "Command: jq -r '.interfaces[].ip' /tmp/jq-01.json"
jq -r '.interfaces[].ip' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "DRILL 1.7: TYPE FUNCTION"
echo "Check data types with type"
echo "------------------------------------------------------------------"
echo ""
echo "Command: jq '.hostname | type' /tmp/jq-01.json"
jq '.hostname | type' /tmp/jq-01.json
echo ""
echo "Command: jq '.port | type' /tmp/jq-01.json"
jq '.port | type' /tmp/jq-01.json
echo ""
echo "Command: jq '.enabled | type' /tmp/jq-01.json"
jq '.enabled | type' /tmp/jq-01.json
echo ""
echo "Command: jq '.roles | type' /tmp/jq-01.json"
jq '.roles | type' /tmp/jq-01.json
echo ""
echo "Command: jq '.config | type' /tmp/jq-01.json"
jq '.config | type' /tmp/jq-01.json
echo ""
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------------"
echo "YOUR TURN - TRY THESE:"
echo "------------------------------------------------------------------"
echo ""
echo "1. Get all patches: jq '.config.patches[]' /tmp/jq-01.json"
echo ""
echo "2. Get second interface name: jq '.interfaces[1].name' /tmp/jq-01.json"
echo ""
echo "3. Get all VLANs: jq '.interfaces[].vlan' /tmp/jq-01.json"
echo ""
echo "------------------------------------------------------------------"
echo "KEY TAKEAWAYS:"
echo "1. . is identity (returns everything)"
echo "2. .key accesses object properties"
echo "3. .key.subkey chains for nesting"
echo "4. .array[] iterates, .array[n] indexes"
echo "5. -r removes quotes from strings"
echo "6. | type shows data type"
echo "------------------------------------------------------------------"