Einleitung
JSON-Daten sind überall. Dieser Guide zeigt dir, wie du JSON direkt in der Kommandozeile verarbeiten kannst.
Pretty Print
JSON schön formatieren
echo '{"name": "Linux"}' | fx .
echo '{"name": "Linux"}' | dasel -r json
echo '{"name": "Linux"}' | jq "."
echo '{"name": "Linux"}' | jshon
echo '{"name": "Linux"}' | jql '.'
jq ist der Standard und wird am meisten empfohlen.
Werte auslesen (Select)
Spezifischen Wert auslesen
echo '{"name": "Linux"}' | dasel -r json '.name'
echo '{"name": "Linux"}' | fx .name
echo '{"name": "Linux"}' | jq ".name"
echo '{"name": "Linux"}' | jshon -e name
echo '{"name": "Linux"}' | jql '.name'
Werte hinzufügen (Put)
Neues Feld hinzufügen
echo '{"name": "Linux"}' | dasel put string -r json '.year' '1991'
echo '{"name": "Linux"}' | jshon -s 1991 -i year
echo '{"name": "Linux"}' | jq '. + {"year": 1991}'
Werte löschen (Delete)
Feld entfernen
echo '{"name": "Linux", "year": 1991}' | dasel delete -r json '.year'
echo '{"name": "Linux", "year": 1991}' | jshon -d year
echo '{"name": "Linux", "year": 1991}' | jq 'del(.year)'
jq - Erweiterte Nutzung
Arrays verarbeiten
# Erstes Element
echo '[1,2,3]' | jq '.[0]'
# Alle Elemente
echo '[1,2,3]' | jq '.[]'
# Array-Länge
echo '[1,2,3]' | jq 'length'
Filtern
# Nach Bedingung filtern
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | jq '.[] | select(.age > 26)'
# Nur bestimmte Felder
echo '[{"name":"Alice","age":30}]' | jq '.[].name'
Transformieren
# Neues Objekt erstellen
echo '{"firstName":"John","lastName":"Doe"}' | jq '{fullName: (.firstName + " " + .lastName)}'
# Array von Werten
echo '[{"name":"Alice"},{"name":"Bob"}]' | jq '[.[].name]'
Mehrere Operationen
# Pipe-Style
echo '{"users":[{"name":"Alice","age":30}]}' | jq '.users | .[0] | .name'
Praktische Beispiele
API-Response verarbeiten
# User-Namen aus GitHub API extrahieren
curl -s https://api.github.com/users/torvalds | jq '.name'
# Nur bestimmte Felder
curl -s https://api.github.com/users/torvalds | jq '{name, location, bio}'
JSON-Datei bearbeiten
# Datei lesen und formatieren
cat config.json | jq '.'
# Wert ändern und zurückschreiben
jq '.version = "2.0"' config.json > config_new.json
JSON zu CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | jq -r '.[] | [.name, .age] | @csv'
JSON validieren
echo '{"valid": true}' | jq empty
# Kein Output = valides JSON
echo '{invalid json}' | jq empty
# Error-Message = invalides JSON
Komplexe Queries
Verschachtelte Objekte
echo '{"user":{"profile":{"name":"Alice"}}}' | jq '.user.profile.name'
Array-Operationen
# Map
echo '[1,2,3]' | jq 'map(. * 2)'
# Filter und map
echo '[1,2,3,4,5]' | jq 'map(select(. > 2))'
# Reduce
echo '[1,2,3,4,5]' | jq 'reduce .[] as $item (0; . + $item)'
Gruppieren
echo '[{"type":"fruit","name":"apple"},{"type":"vegetable","name":"carrot"}]' | jq 'group_by(.type)'
Sortieren
echo '[{"name":"Bob","age":25},{"name":"Alice","age":30}]' | jq 'sort_by(.age)'
jq vs. andere Tools
| Feature | jq | fx | dasel | jshon |
|---|---|---|---|---|
| Pretty Print | ✓ | ✓ | ✓ | ✓ |
| Filter | ✓✓ | ✓ | ✓ | - |
| Transform | ✓✓ | ✓ | ✓ | - |
| Learning Curve | Medium | Easy | Easy | Hard |
| Performance | ✓✓ | ✓ | ✓ | ✓✓ |
Installation
# jq
sudo apt install jq # Debian/Ubuntu
sudo yum install jq # RHEL/CentOS
brew install jq # macOS
# fx
npm install -g fx
# dasel
brew install dasel # macOS
go install github.com/tomwright/dasel/cmd/dasel@latest
Best Practices
- Nutze jq für komplexe Operationen: Die beste Balance aus Features und Performance
- fx für interaktives Browsing: Ideal zum Explorieren von JSON-Strukturen
- Teste Queries mit kleinen Daten: Vor Anwendung auf große Dateien
- Nutze
-rfür Raw Output: Entfernt Quotes bei String-Ausgabe