tutorials / json-processing-cli

JSON Processing in der Kommandozeile

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

Featurejqfxdaseljshon
Pretty Print
Filter✓✓-
Transform✓✓-
Learning CurveMediumEasyEasyHard
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 -r für Raw Output: Entfernt Quotes bei String-Ausgabe

Weitere Ressourcen