Communitygithub.com

JantonioFC/skillsbank

Experte jq-Nutzung für JSON-Abfragen, Filterung, Transformation und Pipeline-Integration. Praktische Muster für echte Shell-Workflows.

Was ist skillsbank?

Dieses Skill vermittelt den effizienten und professionellen Umgang mit `jq`, dem Standard-CLI-Tool zur Verarbeitung von JSON-Daten. Es deckt alle relevanten Aspekte ab: von grundlegenden Abfragen und Filterungen über komplexe Datentransformationen und Aggregationen bis hin zur Integration in Shell-Pipelines. Entwickler lernen, wie sie JSON aus APIs, CLI-Tools (AWS, GitHub, kubectl) oder Logdateien parsen und für ihre Workflows aufbereiten können. Der Fokus liegt auf praktischen, sofort einsetzbaren Beispielen und Best Practices für reale Szenarien. Das Skill ist plattformunabhängig und eignet sich für alle Umgebungen, in denen `jq` verfügbar ist, wie Linux, macOS oder Windows (via WSL). Es erklärt zudem Sicherheitsaspekte und häufige Fallstricke, um typische Fehler zu vermeiden.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor✓Gemini CLI
npx skills add https://github.com/JantonioFC/skillsbank/tree/HEAD/skills/jq

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

jq – JSON-Abfragen und -Transformationen

Übersicht

jq ist das Standard-CLI-Tool zum Abfragen und Umformen von JSON. Dieses Skill behandelt praktische, fortgeschrittene Anwendungen: Filtern von tief verschachtelten Daten, Transformieren von Strukturen, Aggregieren von Werten und Einbinden von jq in Shell-Pipelines. Jedes Beispiel ist kopierbereit für echte Workflows.

Wann dieses Skill einsetzen

  • Zum Parsen von JSON-Ausgaben aus APIs, CLI-Tools (AWS, GitHub, kubectl, docker) oder Logdateien.
  • Zum Transformieren von JSON-Strukturen (Umbenennen von Schlüsseln, Abflachen von Arrays, Gruppieren von Datensätzen).
  • Wenn der Benutzer jq in einem Bash-Skript oder Einzeiler benötigt.
  • Wenn erklärt werden soll, was ein komplexer jq-Ausdruck tut.

Funktionsweise

jq nimmt einen Filterausdruck entgegen und wendet ihn auf die JSON-Eingabe an. Filter lassen sich mit Pipes (|) verketten, und jq verarbeitet nativ Arrays, Objekte, Zeichenketten, Zahlen, Booleans und null.

Einfache Auswahl

# Ein Feld extrahieren
echo '{"name":"alice","age":30}' | jq '.name'
# "alice"

# Verschachtelter Zugriff
echo '{"user":{"email":"[email protected]"}}' | jq '.user.email'

# Array-Index
echo '[10, 20, 30]' | jq '.[1]'
# 20

# Array-Slice
echo '[1,2,3,4,5]' | jq '.[2:4]'
# [3, 4]

# Alle Array-Elemente
echo '[{"id":1},{"id":2}]' | jq '.[]'

Filtern mit select

# Nur übereinstimmende Elemente behalten
echo '[{"role":"admin"},{"role":"user"},{"role":"admin"}]' \
  | jq '[.[] | select(.role == "admin")]'

# Numerischer Vergleich
curl -s https://api.github.com/repos/owner/repo/issues \
  | jq '[.[] | select(.comments > 5)]'

# Prüfen, ob ein Feld existiert und nicht null ist
jq '[.[] | select(.email != null)]'

# Bedingungen kombinieren
jq '[.[] | select(.active == true and .score >= 80)]'

Mapping und Transformation

# Ein Feld aus jedem Array-Element extrahieren
echo '[{"name":"alice","age":30},{"name":"bob","age":25}]' \
  | jq '[.[] | .name]'
# ["alice", "bob"]

# Kurzform: map()
jq 'map(.name)'

# Ein neues Objekt pro Element erzeugen
jq '[.[] | {user: .name, years: .age}]'

# Ein berechnetes Feld hinzufügen
jq '[.[] | . + {senior: (.age > 28)}]'

# Schlüssel umbenennen
jq '[.[] | {username: .name, email_address: .email}]'

Aggregation und Reduce

# Summe aller Werte
echo '[1, 2, 3, 4, 5]' | jq 'add'
# 15

# Summe eines Feldes über Objekte hinweg
jq '[.[].price] | add'

# Elemente zählen
jq 'length'

# Maximum / Minimum
jq 'max_by(.score)'
jq 'min_by(.created_at)'

# reduce: benutzerdefinierter Akkumulator
echo '[1,2,3,4,5]' | jq 'reduce .[] as $x (0; . + $x)'
# 15

# Nach Feld gruppieren
jq 'group_by(.department)'

# Anzahl pro Gruppe
jq 'group_by(.status) | map({status: .[0].status, count: length})'

Zeichenketteninterpolation und Formatierung

# Zeichenketteninterpolation
jq -r '.[] | "\(.name) ist \(.age) Jahre alt"'

# Als CSV formatieren (ohne Kopfzeile)
jq -r '.[] | [.name, .age, .email] | @csv'

# Als TSV formatieren
jq -r '.[] | [.name, .score] | @tsv'

# URL-Kodierung eines Wertes
jq -r '.query | @uri'

# Base64-Kodierung
jq -r '.data | @base64'

Arbeiten mit Schlüsseln und Pfaden

# Alle Schlüssel der obersten Ebene auflisten
jq 'keys'

# Prüfen, ob ein Schlüssel existiert
jq 'has("email")'

# Einen Schlüssel löschen
jq 'del(.password)'

# Verschachtelte Schlüssel aus jedem Element löschen
jq '[.[] | del(.internal_id, .raw_payload)]'

# Rekursiver Abstieg: alle Werte eines Schlüssels irgendwo im Baum finden
jq '.. | .id? // empty'

# Alle Blattpfade abrufen
jq '[paths(scalars)]'

Bedingungen und Fehlerbehandlung

# if-then-else
jq 'if .score >= 90 then "A" elif .score >= 80 then "B" else "C" end'

# Alternativoperator: Fallback bei null oder false
jq '.nickname // .name'

# try-catch: Fehler überspringen statt anzuhalten
jq '[.[] | try .nested.value catch null]'

# Null-Ausgabe mit // empty unterdrücken
jq '.[] | .optional_field // empty'

Praktische Shell-Integration

# Aus Datei lesen
jq '.users' data.json

# Kompakte Ausgabe (keine Leerzeichen) für weitere Pipes
jq -c '.[]' records.json | while IFS= read -r record; do
  echo "Verarbeite: $record"
done

# Shell-Variable in jq übergeben
STATUS="active"
jq --arg s "$STATUS" '[.[] | select(.status == $s)]'

# Eine Zahl übergeben
jq --argjson threshold 42 '[.[] | select(.value > $threshold)]'

# Mehrere JSON-Zeilen in ein Array einlesen
jq -s '.' records.ndjson

# Mehrere Dateien: alle in ein Array einlesen
jq -s 'add' file1.json file2.json

# Null-sichere Pipeline aus einem Befehl
kubectl get pods -o json | jq '.items[] | {name: .metadata.name, status: .status.phase}'

# GitHub CLI: PR-Nummern extrahieren
gh pr list --json number,title | jq -r '.[] | "\(.number)\t\(.title)"'

# AWS CLI: laufende Instance-IDs auflisten
aws ec2 describe-instances \
  | jq -r '.Reservations[].Instances[] | select(.State.Name=="running") | .InstanceId'

# Docker: Containernamen und Images anzeigen
docker inspect $(docker ps -q) | jq -r '.[] | "\(.Name)\t\(.Config.Image)"'

Fortgeschrittene Muster

# Objekt aus Arrays in Array aus Objekten transponieren
# Eingabe: {"names":["a","b"],"scores":[10,20]}
jq '[.names, .scores] | transpose | map({name: .[0], score: .[1]})'

# Eine Ebene abflachen
jq 'flatten(1)'

# Nach Feld eindeutig machen
jq 'unique_by(.email)'

# Sortieren, deduplizieren und neu indizieren
jq '[.[] | .name] | unique | sort'

# Walk: Transformation auf jeden Knoten rekursiv anwenden
jq 'walk(if type == "string" then ascii_downcase else . end)'

# env: Umgebungsvariablen innerhalb von jq lesen
export API_KEY=secret
jq -n 'env.API_KEY'

Best Practices

  • Verwenden Sie immer -r (raw output), wenn Sie Ergebnisse von jq an Shell-Variablen oder andere Befehle übergeben, um JSON-String-Anführungszeichen zu entfernen.
  • Nutzen Sie --arg / --argjson, um Shell-Variablen sicher zu übergeben – interpolieren Sie Shell-Variablen niemals direkt in Filterstrings.
  • Bevorzugen Sie map(f) gegenüber [.[] | f] aus Lesbarkeitsgründen.
  • Verwenden Sie -c (compact) für zeilenweise JSON-Pipelines; lassen Sie es für menschenlesbare Ausgaben weg.
  • Testen Sie Filter interaktiv mit jq -n und wörtlicher Eingabe, bevor Sie sie in Skripte einbetten.
  • Nutzen Sie empty, um unerwünschte Elemente zu entfernen, anstatt sie auf null zu filtern.

Sicherheitshinweise

  • jq ist von Natur aus schreibgeschützt – es kann keine Dateien schreiben oder Befehle ausführen.
  • Vermeiden Sie es, nicht vertrauenswürdige JSON-Feldwerte direkt in Shell-Befehle einzubetten; setzen Sie stattdessen Anführungszeichen oder verwenden Sie --arg.

Häufige Fallstricke

  • Problem: jq gibt null aus, statt des erwarteten Wertes. Lösung: Überprüfen Sie Tippfehler in Schlüsselnamen; verwenden Sie keys, um die tatsächlichen Feldnamen zu inspizieren. JSON unterscheidet zwischen Groß- und Kleinschreibung.

  • Problem: Zahlen werden im Ergebnis als Zeichenketten mit Anführungszeichen ausgegeben. Lösung: Verwenden Sie --argjson anstelle von --arg, wenn Sie numerische Werte übergeben.

  • Problem: Der Filter funktioniert im Terminal, schlägt aber in einem Skript fehl. Lösung: Stellen Sie sicher, dass der Filterstring im Shell-Kontext in einfachen Anführungszeichen steht, um Variablenexpansion zu verhindern. Beispiel: jq '.field' nicht jq ".field".

  • Problem: add gibt null auf einem leeren Array zurück. Lösung: Nutzen Sie add // 0 oder add // "", um einen Standardfallback zu setzen.

  • Problem: Das Streamen großer Dateien ist langsam. Lösung: Verwenden Sie jq --stream oder wechseln Sie zu jstream/gron für sehr große Dateien.

Verwandte Skills

  • @bash-pro – Einbinden von jq-Aufrufen in robuste Shell-Skripte
  • @bash-linux – Allgemeine Shell-Pipeline-Muster
  • @github-automation – Nutzung von jq mit der GitHub-CLI-JSON-Ausgabe

Einschränkungen

  • Verwenden Sie dieses Skill nur, wenn die Aufgabe eindeutig dem oben beschriebenen Umfang entspricht.
  • Behandeln Sie die Ausgabe nicht als Ersatz für umgebungsspezifische Validierung, Tests oder Expertenüberprüfung.
  • Fragen Sie nach, wenn erforderliche Eingaben, Berechtigungen, Sicherheitsgrenzen oder Erfolgskriterien fehlen.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

JantonioFC/skillsbank

AI-powered image editing with style transfer and object removal

JantonioFC/skillsbank

Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.

JantonioFC/skillsbank

Analise e auditoria de editais de leilao judicial e extrajudicial. Riscos ocultos, clausulas perigosas, debitos, ocupante e classificacao da oportunidade.

JantonioFC/skillsbank

Embed Photopea in web apps using photopea.js. Covers embedding, file I/O, scripting, exporting, layers, text, filters, and the full Photoshop-compatible API.

JantonioFC/skillsbank

Best practices for Remotion - Video creation in React

JantonioFC/skillsbank

Generate walkthrough videos from Stitch projects using Remotion with smooth transitions, zooming, and text overlays

JantonioFC/skillsbank

Seek and analyze video content using Memories.ai Large Visual Memory Model for persistent video intelligence

JantonioFC/skillsbank

Writes complete, structured landing pages optimized for SEO ranking, AEO citation, and visitor conversion. Activate when the user wants to write or generate a landing page for a product, service, or offer.

JantonioFC/skillsbank

Video and audio perception, indexing, and editing. Ingest files/URLs/live streams, build visual/spoken indexes, search with timestamps, edit timelines, add overlays/subtitles, generate media, and create real-time alerts.

JantonioFC/skillsbank

Upload, stream, search, edit, transcribe, and generate AI video and audio using the VideoDB SDK.

JantonioFC/skillsbank

Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory.

JantonioFC/skillsbank

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities.

JantonioFC/skillsbank

Tool lifecycle UI components for React/Next.js from ui.inference.sh. Display tool calls: pending, progress, approval required, results. Capabilities: tool status, progress indicators, approval flows, results display. Use for: showing agent tool calls, human-in-the-loop approvals, tool output. Triggers: tool ui, tool calls, tool status, tool approval, tool results, agent tools, mcp tools ui, function calling ui, tool lifecycle, tool pending

JantonioFC/skillsbank

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

JantonioFC/skillsbank

When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,'...

JantonioFC/skillsbank

Create AI avatar and talking head videos with OmniHuman, Fabric, PixVerse via inference.sh CLI. Models: OmniHuman 1.5, OmniHuman 1.0, Fabric 1.0, PixVerse Lipsync. Capabilities: audio-driven avatars, lipsync videos, talking head generation, virtual presenters. Use for: AI presenters, expla...

JantonioFC/skillsbank

Create AI marketing videos for ads, promos, product launches, and brand content. Models: Veo, Seedance, Wan, FLUX for visuals, Kokoro for voiceover. Types: product demos, testimonials, explainers, social ads, brand videos. Use for: Facebook ads, YouTube ads, product launches, brand awarene...

JantonioFC/skillsbank

Generate AI videos with Google Veo, Seedance, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 1.5 Pro, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, lipsync, avatar animation, video upscaling, fole...

JantonioFC/skillsbank

Production-ready CI/CD configurations for Playwright — GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Docker, parallel sharding, reporting, code coverage, and global setup/teardown.

JantonioFC/skillsbank

You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message.

Verwandte Skills