jq Session 03: Construction
Creating new data structures. This session covers object construction, array building, CSV output, and string interpolation.
Pre-Session State
-
Can filter with
select() -
Can transform with
map() -
Understand pipe operator
Setup
cat > /tmp/jq-sessions.json << 'EOF'
[
{"mac": "AA:BB:CC:11:22:33", "ip": "10.50.10.100", "user": "evanusmodestus", "vlan": 10},
{"mac": "AA:BB:CC:44:55:66", "ip": "10.50.10.101", "user": "gabriel", "vlan": 10},
{"mac": "DD:EE:FF:77:88:99", "ip": "10.50.20.50", "user": "guest", "vlan": 20}
]
EOF
Lesson 1: Object Construction
Concept: Use {key: value} to build new objects.
Exercise 1.1: Build simple object
cat /tmp/jq-sessions.json | jq '.[] | {endpoint: .mac, address: .ip}'
Output: New objects with renamed fields.
Exercise 1.2: Include literal values
cat /tmp/jq-sessions.json | jq '.[] | {mac: .mac, ip: .ip, source: "ise"}'
Output: Objects with added static field.
Exercise 1.3: Shorthand syntax
cat /tmp/jq-sessions.json | jq '.[] | {mac, ip, user}'
Output: Same as {mac: .mac, ip: .ip, user: .user}.
Lesson 2: Array Construction
Concept: Use […] to build arrays.
Exercise 2.1: Collect into array
cat /tmp/jq-sessions.json | jq '[.[] | .ip]'
Output: ["10.50.10.100", "10.50.10.101", "10.50.20.50"]
Exercise 2.2: Build tuple arrays
cat /tmp/jq-sessions.json | jq '.[] | [.user, .ip, .vlan]'
Output: Arrays like ["evanusmodestus", "10.50.10.100", 10]
Lesson 3: CSV Output
Concept: Use @csv to format arrays as CSV.
Exercise 3.1: Basic CSV
cat /tmp/jq-sessions.json | jq -r '.[] | [.user, .ip, .vlan] | @csv'
Output:
"evanusmodestus","10.50.10.100",10 "gabriel","10.50.10.101",10 "guest","10.50.20.50",20
Exercise 3.2: CSV with header
cat /tmp/jq-sessions.json | jq -r '["user","ip","vlan"], (.[] | [.user, .ip, .vlan]) | @csv'
Output: CSV with header row first.
Exercise 3.3: TSV output
cat /tmp/jq-sessions.json | jq -r '.[] | [.user, .ip, .vlan] | @tsv'
Output: Tab-separated values.
Lesson 4: String Interpolation
Concept: Use \(expr) inside strings for interpolation.
Exercise 4.1: Build formatted string
cat /tmp/jq-sessions.json | jq -r '.[] | "User \(.user) at \(.ip)"'
Output: User evanusmodestus at 10.50.10.100
Exercise 4.2: Build shell commands
cat /tmp/jq-sessions.json | jq -r '.[] | "ping -c1 \(.ip) # \(.user)"'
Output: Shell commands you could pipe to bash.
Summary: What You Learned
| Concept | Syntax | Example |
|---|---|---|
New object |
|
|
Shorthand |
|
|
New array |
|
|
Collect |
|
|
CSV |
|
|
TSV |
|
|
Interpolate |
|
|
Exercises to Complete
-
[ ] Create CSV of mac,ip,user for VLAN 10 only
-
[ ] Build objects with fields: endpoint_mac, endpoint_ip, network_vlan
-
[ ] Generate
arp -s <ip> <mac>commands for each entry -
[ ] Create array of all unique VLANs
Next Session
Session 04: Conditions - if/then/else, alternative operator, error handling.
Session Log
| Timestamp | Notes |
|---|---|
Start |
<Record when you started> |
End |
<Record when you finished> |