[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Paketinstallation_DEB: Ein einzelnes Paket installieren] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [github:kellyjonbrazil/jc:jc] ist ein in [:Python:] geschriebenes Programm, welches die Ausgabe von über 100 gängigen/populären Kommandozeilenprogrammen nach [https://www.json.org JSON] {en} oder alternativ [wikipedia:YAML:] konvertiert. Dies ist besonders praktisch, wenn man die Ausgabe mit Tools wie [:jq:] weiter bearbeiten möchte. Außerdem kann jc auch csv-Dateien als Eingabe nehmen und diese dann nach JSON konvertieren. Außer für Linux ist jc auch für Windows und macOS verfügbar. = Installation = == aus den Paketquellen == jc ist in den Paketquellen ab [:Impish:] enthalten[1]: {{{#!vorlage Paketinstallation jc, universe }}} Allerdings ist die Programmversion in den Paketquellen je nach Ubuntu-Version (ziemlich) alt, so dass eine manuelle Installation vorzuziehen ist. == Paket manuell installieren == Auf der [github:kellyjonbrazil/jc/releases:Release-Seite] des Projekts gibt es ein fertiges DEB-Paket, dass man manuell installieren kann[2]. [[Vorlage(Fremd, Paket)]] == über pip == [[Vorlage(PipInstallation, jc)]] = Benutzung = Die allgemeine Syntax von jc ist: {{{#!vorlage Befehl KOMMANDO | jc PARSER [OPTIONEN] }}} `KOMMANDO` ist dabei der Befehl, der die Eingabe für jc liefert. `PARSER` teilt jc mit, welches Programm die Eingabe liefert, wodurch jc weiß, wie die Eingabe zu verarbeiten und konvertieren ist. Beispielsweise liefert der Befehl {{{#!vorlage Befehl uname -a | jc --uname }}} die folgende Ausgabe: {{{#!code json {"kernel_name":"Linux","node_name":"thinkbook15","kernel_release":"5.15.0-37-generic","operating_system":"GNU/Linux","processor":"x86_64","hardware_platform":"x86_64","machine":"x86_64","kernel_version":"#39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022"} }}} Eine Übersicht über alle Befehle, deren Ausgabe jc zu JSON konvertieren kann, liefert der Aufruf von {{{#!vorlage Befehl jc -h }}} oder alternativ der Abschnitt "Parsers" auf der [github:kellyjonbrazil/jc#parsers:Projektseite]. jc kennt eine Reihe von Optionen, von denen zwei besonders interessant sind: die Option `-p` formatiert die Ausgabe mit sinnvollen Zeilenumbrüchen besser. Der obige Befehl in Kombination mit der Option `-p` liefert die folgende Ausgabe: {{{#!code json { "kernel_name": "Linux", "node_name": "thinkbook15", "kernel_release": "5.15.0-37-generic", "operating_system": "GNU/Linux", "processor": "x86_64", "hardware_platform": "x86_64", "machine": "x86_64", "kernel_version": "#39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022" } }}} Möchte man die Ausgabe in YAML statt JSON, muss man die Option `-y` nutzen. Die Ausgabe sieht dann so aus: {{{#!code yaml --- kernel_name: Linux node_name: thinkbook15 kernel_release: 5.15.0-37-generic operating_system: GNU/Linux processor: x86_64 hardware_platform: x86_64 machine: x86_64 kernel_version: '#39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022' }}} Wie weiter oben gesagt, kann jc auch CSV nach JSON konvertieren. Beim Einlesen einer CSV-Datei erkennt jc den Delimiter automatisch, zumindest dann, wenn es sich um einen gängigen Delimiter wie das Komma `,` oder das Semikolon `;`oder einen Tabulator handelt. Die folgende Datei {{{#!code csv Name;Version;LTS/STS;Erscheinungsdatum;Supportende Jammy Jellyfish;22.04;LTS;21. April 2022 ;April 2027 Impish Indri;21.10;STS;14. Oktober 2021;14. Juli 2022 Focal Fossa;20.04;LTS;23. April 2020;April 2025 }}} konvertiert jc wie folgt: {{{#!code json [ { "Name": "Jammy Jellyfish", "Version": "22.04", "LTS/STS": "LTS", "Erscheinungsdatum": "21. April 2022 ", "Supportende": "April 2027" }, { "Name": "Impish Indri", "Version": "21.10", "LTS/STS": "STS", "Erscheinungsdatum": "14. Oktober 2021", "Supportende": "14. Juli 2022" } { "Name": "Focal Fossa", "Version": "20.04", "LTS/STS": "LTS", "Erscheinungsdatum": "23. April 2020", "Supportende": "April 2025" } ] }}} Auf der Projektseite im Abschnitt [github:kellyjonbrazil/jc#examples:Examples] sind eine ganze Reihe weiterer Beispiele zu finden, wie jc die Ausgabe diverser Programme nach JSON konvertiert. #tag: Shell, Programmierung, Python, JSON, YAML