JSON-Tools für die Shell

  Jan Fader   Lesezeit: 4 Minuten  🗪 3 Kommentare

JSON auf der Kommandozeile darstellen und bearbeiten.

json-tools für die shell

Das Format JSON setzt sich ja immer mehr durch und es gab auf GNU/Linux.ch bereits einige Artikel zu JSON-Tools.

Allerdings bin ich fast nur auf der Shell unterwegs und da ist JSON teilweise eher sperrig. Aber es gibt Abhilfe dafür. Hier einige von mir eingesetzte Tools.

Falls ihr weitere Tools im JSON-Kontext empfehlen könnt, dann kommentiert doch unter diesen Artikel oder diskutiert im Matrix-Raum darüber.

Anzeige

Zur Anzeige von JSON reicht eigentlich cat oder bat, aber bei langen JSON-Dateien auf einer Zeile wird das dann schnell unübersichtlich und Syntax-Highlighting für unterschiedliche Typen hat man dann auch nicht.

fx oder jless bieten hier Abhilfe. Diese können sowohl auf Dateien als auch in Pipes verwendet werden.

Erstellung von JSON-Objekten

Manchmal braucht es nicht nur die Anzeige oder die Bearbeitung, sondern man will ganz neue JSON erstellen. Das geht super mit jo

Folgendes Beispiel mit Ein- und Ausgabe:

jo -p name=jf id=13 parser=false detail=$(jo firstname=Jan lastname=Fader)
{
   "name": "jf",
   "id": 13,
   "parser": false,
   "detail": {
      "firstname": "Jan",
      "lastname": "Fader"
   }
}

Filtern und bearbeiten

jq erlaubt das Filtern und Bearbeiten, aber die Syntax finde ich zu kompliziert.

Daher kommt gron zum Einsatz. Mit diesem klopft man das JSON flach, sodass es mit üblichen Shell-Tools (z.B. sed, grep oder awk) bearbeitbar ist.

Nimmt man das oben mit jo erstellte Beispiel und verarbeitet es mit gron erhält man folgende Ausgabe:

json = {};
json.detail = {};
json.detail.firstname = "Jan";
json.detail.lastname = "Fader";
json.id = 13;
json.name = "jf";
json.parser = false;

Mit gron -u kann man es nach der Bearbeitung dann wieder in JSON umwandeln. Bei mir kommt da häufig dann eine Pipe-Kette aus curl, gron, sed/grep, gron -u zum Einsatz.

Tags

JSON, Kommandozeile

Jens T.
Geschrieben von Jens T. am 3. November 2022 um 12:08

Sehr interessant, danke für die Tipps! Hätte ich jo früher gekannt, hätte mir das viel Arbeit und Gewurschtel mit Maskierung von Zeichen in der Bash erspart. Schade dass es unter Debian keine fertigen Pakete von fx und jless gibt, sondern ich dazu erst Snap und auch noch Homebrew installieren soll. Das ist mir dann doch ein bisschen Overkill.

cambid83
Geschrieben von cambid83 am 7. November 2022 um 08:30

Für fx und jless gibt es auch statische Binaries direkt auf Github. Dann entfällt die Installation via Snap/Homebrew oder Paketmanager.

DJ Adams
Geschrieben von DJ Adams am 8. November 2022 um 09:21

Very interesting, didn't know about jo, thanks! I have written some introductory posts on my blog on jq, you may be interested (you mentioned that you find the syntax too complicated, but perhaps the posts will help).

https://qmacro.org/tags/jq/

Cheers! DJ