Zum Inhalt springen

jq-Spielwiese

jq Playground

Führt jq-1.7-Filter im Browser gegen eingefügtes JSON aus, mit Spickzettel, und liefert die passende Kommandozeile.

Führt jq-Filter gegen ein Dokument im Browser aus – ein echter Interpreter für die Grammatik von jq 1.7 statt ein paar String-Operationen, sodass Pipes, `reduce`, `def`, Destrukturierung und die Update-Operatoren sich alle so verhalten wie auf der Kommandozeile. Der entsprechende Shell-Befehl wird unter dem Filter ausgegeben.

🔒 Läuft vollständig in Ihrem Browserjqjsonqueryplayground

Filter

jq '.orders[] | select(.status == "shipped") | {id, customer}' data.json

Eingabe-JSON

.json-Datei hier ablegen

Wird nur in diesem Tab gelesen. Nichts wird hochgeladen.

1 Ausgabe

Ausgaben

1

Zeit

3 ms

Typen

object

Ein hier geschriebener Interpreter für die Grammatik von jq 1.7. Er kennt Pfade (.a[0].b, .., ?), |·,·//, Arithmetik, Vergleiche, and/or/not, String-Interpolation, if, try, reduce, foreach, as (samt Destrukturierung), def, Aktualisierungen wie |=·+=, Formate wie @base64·@csv und die 180 unten aufgeführten Builtins. Die Tests sind die Beispiele aus dem jq-Handbuch selbst.

Nicht unterstützt: input·inputs (es gibt nur ein Dokument), $ENV·env (leer), label·break, --stream, verschachtelte Arrays in @sh, andere Formate als ISO 8601 in strptime, der Stream-Modus von getpath und Module (import). Reguläre Ausdrücke laufen auf der Engine des Browsers statt auf jqs Oniguruma, daher \p{L} und benannte Gruppen funktionieren, und rund um Lookbehind kann es feine Unterschiede geben.

Wenn Sie nur einen einzigen Pfad wollen, ist vielleicht der JSONPath-Tester einfacher.

So funktioniert es

  1. Fügen Sie das Dokument ein

    Ein JSON-Wert oder mehrere hintereinander – das Werkzeug liest sie als jq-Eingabestrom, und die Anzahl steht im Titel des Panels.

  2. Schreiben Sie den Filter, oder nehmen Sie einen aus der Beispielreihe

    Die Schaltflächen decken die Formen ab, die vorkommen: select, map, group_by, String-Interpolation, reduce und die Update-Operatoren. Beim Darüberfahren steht, was einer tut.

  3. Setzen Sie die Flags, die Sie auf der Kommandozeile verwenden würden

    `-c` für eine Zeile pro Ausgabe, `-S` zum Sortieren der Schlüssel, `-r` für Strings ohne Anführungszeichen, `-s`, um mehrere Eingaben in ein Array zu schlürfen. Die Befehlszeile unten aktualisiert sich mit ihnen.

  4. Kopieren Sie den Befehl, nicht nur die Ausgabe

    Die erzeugte `jq …`-Zeile ist für eine POSIX-Shell korrekt gequotet, sodass sie direkt in ein Skript oder eine Pipeline gehen kann.

Häufige Fragen

Ist das wirklich jq?

Es ist ein unabhängiger Interpreter für die Grammatik von jq, getestet gegen die Beispiele in jqs eigenem Handbuch. Das deckt die Sprache und die gängigen Builtins ab; es ist keine Kompilierung von jq selbst, sodass alles, was von jqs C-Interna abhängt, abweichen wird.

Warum funktioniert `input` nicht?

Weil es hier ein Dokument gibt, keinen Strom, aus dem ein Filter mehr ziehen könnte. `input`, `inputs`, `$ENV`, `env`, `label`/`break`, `--stream` und Module werden auf der Seite alle als nicht unterstützt aufgeführt, statt rätselhaft zu scheitern.

Mein regulärer Ausdruck verhält sich anders als in jq.

jq verwendet Oniguruma; hier wird die Engine des Browsers verwendet. In der Praxis funktionieren `\p{L}` und benannte Gruppen in beiden, und die Unterschiede zeigen sich bei Lookbehind und einigen Zeichenklassen-Escapes. Wenn ein Muster wichtig ist, testen Sie es auf der Maschine, die es ausführen wird.

Es hat bei 5.000 Ausgaben aufgehört.

Eine absichtliche Grenze, zusammen mit einer Schrittgrenze. `..` über ein großes Dokument erzeugt enorme Ausgaben, und ein Filter mit durchgehender Rekursion würde sonst den Tab aufhängen. Grenzen Sie den Filter ein, oder führen Sie ihn auf der Kommandozeile aus, wo Sie nach `head` pipen können.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.