Das Terminal ist bei mir immer offen. Mit einem einfachen Shortcut kann ich jederzeit und überall mir das Terminal in den Vordergrund holen um irgendwas zu machen. Denn ich liebe die Vorteile an der Kommandozeile. Bedingt dadurch betrachte ich viele Sachen auch durch das Terminal. U.A. auch viele JSON Strings, die mir etliche Programme zurück geben. Diese sind aber meistens schwer zu entziffern, da sie nicht schön eingerückt sind (was verständlich ist). Dieses Problem wollte ich aber schnell lösen und hab dazu mal eine Lösung gesucht.

Das Problem

Ich nutze speedtest.net oft um meine Internet Geschwindigkeit zu testen. Dazu nutze ich aber selten die Weboberfläche, sondern das CLI Tool speedtest-cli. Damit kann ich schnell und bequem Speedtests durchführen. Dieses Tool bietet die Möglichkeit die Messungen im JSON Format zurückzugeben. Das freut mich natürlich, denn dadurch stehen mir viele Möglichkeiten offen, die Daten weiterzuverarbeiten. Allerdings ist der JSON String schwer zu lesen:

Nun ist speedtest-cli nicht das einzige Tool, dass mir JSON zurück gibt und oft arbeite ich mit APIs die mir JSON zurück geben sollen. Um die einfacher zu inspizieren habe ich nach einer Lösung gesucht.

Python zur Hilfe

Für Python gibt es, wie für so viele Programmiersprachen, ein JSON Modul, dass die Arbeit mit JSON vereinfacht. Der Clue ist, man kann Python Module auch direkt im Terminal ausführen. So kann man mittels python -mjson.tool eben genau jenes Modul ausführen. Wird das Modul ohne weiteren Angaben aufgerufen wird der Stream vom stdin gewählt und man kann einfach über eine Pipe das Python Modul mit JSON füttern. Somit erhalten wir nun folgendes:

Mehr Farben braucht das Land

Das sieht soweit schon viel besser aus. Aber mit Farben ist alles besser. Also wie könnten wir jetzt noch den Output kolorieren? Ganz einfach, mittels pygmentize. Das praktische Tool kann viele verschiedene Sorten Text entsprechend färben. Pygmentize kann dafür auf verschiedene Scanner (auch Lexer genannt) zurück greifen. Also schalten wir nun einfach noch Pygmentize in die Reihe, haben also folgenden Befehl speedtest --json | python -mjson.tool | pygmentize -l json, und das Ergebnis sieht so aus:

Wer soll sich das merken?

Praktisch praktisch, aber wer soll sich diesen Befehl merken? Genau dafür gibt es ja alias. Ich habe dazu einfach zwei Aliase in die .zshrc (analog geht auch .bashrc) eingetragen:

alias json='python -mjson.tool'
alias jsonc='json | pygmentize -l json'

Nun muss ich lediglich den Output über die Pipe in json oder jsonc weiterleiten. Das würde bei unserem Beispiel dann so aussehen:

# JSON Output schön darstellen
speedtest --json | json

# Und mit Farbe wäre es
speedtest --json | jsonc

So einfach kann es manchmal sein. Und jetzt kann ich in Ruhe meinen JSON Text lesen und verstehen ohne dass mir die Augen danach weh tun.

TL:DR

Mit python -mjson.tool wird ein JSON String schön ausgegeben und mit pygmentize -l json kann man das ganze noch färben. Somit kann ich das ganze in einem Kommando schreiben indem ich die Pipe nutze: speedtest --json | python -mjson.tool | pygmentize -l json

Veröffentlicht von Hans-Helge

Der studierte Informatiker arbeitet als Entwickler und Trainer bei ChurchTools und betreut neben eigenen Projekten einige andere Webseiten u.A. im ehrenamtlichen Bereich.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert