Zuordnung von Junos OS Command Output zu JSON in der CLI
Das Junos-Betriebssystem (Junos OS) unterstützt nativ XML für den Betrieb und die Konfiguration von Geräten, auf denen Junos OS ausgeführt wird, und die Befehlszeilenschnittstelle (CLI) von Junos OS und die Junos OS-Infrastruktur kommunizieren mithilfe von XML. Wenn Sie einen Betriebsbefehl ausgeben oder die Konfiguration in der CLI anzeigen, konvertiert die CLI die Ausgabe aus XML in ein lesbares Textformat zur Anzeige.
Ab Junos OS Version 14.2 unterstützen Geräte, auf denen Junos OS ausgeführt wird, auch eine JavaScript Object Notation (JSON)-Darstellung der operativen Befehlsausgabe und der Junos OS-Konfigurationshierarchie. Um die Befehlsausgabe oder -konfiguration in JSON anstelle des standardmäßig formatierten ASCII-Textes in der Junos OS CLI anzuzeigen, hängen Sie die | display json
Option an den Befehl an.
Im folgenden Beispiel wird der show chassis hardware
Befehl ausgeführt und die Ausgabe im JSON-Format angezeigt. Die Antwort ist identisch mit der Antwort des NETCONF- oder Junos XML-Protokollservers für die <get-chassis-inventory format="json">
RPC-Anforderung.
user@host> show chassis hardware | display json { "chassis-inventory" : [ { "attributes" : { "xmlns" : "http://xml.juniper.net/junos/16.1R1/junos-chassis" }, "chassis" : [ { "attributes" : {"junos:style" : "inventory"}, "name" : [ { "data" : "Chassis" } ], "serial-number" : [ { "data" : "serial-number" } ], "description" : [ { "data" : "MX80-48T" } ], "chassis-module" : [ { "name" : [ { "data" : "Midplane" } ], "version" : [ { "data" : "REV 11" } ], "part-number" : [ { "data" : "711-031603" } ], "serial-number" : [ { "data" : "serial-number" } ], "description" : [ { "data" : "MX80-48T" } ], "clei-code" : [ { "data" : "CMMAX10BRD" } ], "model-number" : [ { "data" : "CHAS-MX80-48T-S" } ] }, //* additional JSON objects *// ] } ] } ] }
Junos OS verwendet ab Junos OS Version 16.1 eine neue Standardimplementierung für die Serialisierung von Konfigurationsdaten, die im JSON-Format emittiert werden. Der neue Standard " ietf
, ist wie in den folgenden Internet-Entwürfen definiert:
draft-ietf-netmod-yang-json-09, JSON Encoding of Data Modeled with YANG
draft-ietf-netmod-yang-metadata-06, Definition und Verwendung von Metadaten mit YANG
In früheren Versionen ist verbose
der Standard, der alle Objekte als JSON-Arrays abgibt. Sie können das Standard-Exportformat für JSON-Konfigurationsdaten konfigurieren, indem Sie die entsprechende Anweisung auf Hierarchieebene [edit system export-format json]
konfigurieren. Sie können die Anweisung konfigurieren, die verbose
mit Junos OS Version 16.1R1 beginnt, obwohl die Anweisung erst nach einer späteren Version in der Junos OS CLI offengelegt wird.
Geräte mit Junos OS Version 17.3R1 unterstützen ab Junos OS die Ausgabe des Betriebszustands des Geräts im kompakten JSON-Format, bei dem nur Objekte mit mehreren Werten als JSON-Arrays emittiert werden. Konfigurieren Sie die Anweisung auf [edit system export-format state-data json]
Hierarchieebene, um das Gerät so zu konfigurieren, dass es das compact
kompakte JSON-Format ausgibt.
user@host# set system export-format state-data json compact
Das folgende Beispiel führt den show system uptime
Befehl aus und zeigt die Ausgabe im nicht kompakten und kompakten JSON-Format an.
user@host> show system uptime | display json
Nicht kompaktes JSON-Format:
{ "system-uptime-information" : [ { "attributes" : {"xmlns" : "http://xml.juniper.net/junos/18.1R1/junos"}, "current-time" : [ { "date-time" : [ { "data" : "2018-05-15 13:43:46 PDT", "attributes" : {"junos:seconds" : "1526417026"} } ] } ], "time-source" : [ { "data" : " NTP CLOCK " } ], "system-booted-time" : [ { "date-time" : [ { "data" : "2018-05-15 10:57:02 PDT", "attributes" : {"junos:seconds" : "1526407022"} } ], "time-length" : [ { "data" : "02:46:44", "attributes" : {"junos:seconds" : "10004"} } ] } ], "protocols-started-time" : [ { "date-time" : [ { "data" : "2018-05-15 10:59:33 PDT", "attributes" : {"junos:seconds" : "1526407173"} } ], "time-length" : [ { "data" : "02:44:13", "attributes" : {"junos:seconds" : "9853"} } ] } ], "last-configured-time" : [ { "date-time" : [ { "data" : "2018-05-02 17:57:44 PDT", "attributes" : {"junos:seconds" : "1525309064"} } ], "time-length" : [ { "data" : "1w5d 19:46", "attributes" : {"junos:seconds" : "1107962"} } ], "user" : [ { "data" : "admin" } ] } ], "uptime-information" : [ { "date-time" : [ { "data" : "1:43PM", "attributes" : {"junos:seconds" : "1526417026"} } ], "up-time" : [ { "data" : "2:47", "attributes" : {"junos:seconds" : "10034"} } ], "active-user-count" : [ { "data" : "1", "attributes" : {"junos:format" : "1 user"} } ], "load-average-1" : [ { "data" : "0.49" } ], "load-average-5" : [ { "data" : "0.19" } ], "load-average-15" : [ { "data" : "0.10" } ] } ] } ] }
Das kompakte JSON-Format für den gleichen Befehl lautet:
{ "system-uptime-information" : { "current-time" : { "date-time" : "2018-05-15 13:49:56 PDT" }, "time-source" : " NTP CLOCK ", "system-booted-time" : { "date-time" : "2018-05-15 10:57:02 PDT", "time-length" : "02:52:54" }, "protocols-started-time" : { "date-time" : "2018-05-15 10:59:33 PDT", "time-length" : "02:50:23" }, "last-configured-time" : { "date-time" : "2018-05-15 13:49:40 PDT", "time-length" : "00:00:16", "user" : "admin" }, "uptime-information" : { "date-time" : "1:49PM", "up-time" : "2:53", "active-user-count" : "1", "load-average-1" : "0.00", "load-average-5" : "0.06", "load-average-15" : "0.06" } } }