在 CLI 中将 Junos OS 命令输出映射到 JSON
Junos 操作系统 (Junos OS) 本机支持 XML,用于运行 Junos OS 的设备的操作和配置,Junos OS 命令行界面 (CLI) 和 Junos OS 基础架构使用 XML 进行通信。在 CLI 中发出操作命令或显示配置时,CLI 会将 XML 的输出转换为可读文本格式以进行显示。
从 Junos OS 版本 14.2 开始,运行 Junos OS 的设备还支持操作命令输出和 Junos OS 配置层次结构的 JavaScript 对象符号 (JSON) 表示。在 Junos OS CLI 上,要显示 JSON 中的命令输出或配置,而不是默认格式的 ASCII 文本,请 | display json 将选项附加到 命令。
以下示例执行 show chassis hardware 命令并显示 JSON 格式的输出。响应与 RPC 请求的 NETCONF 或 Junos XML 协议服务器响应 <get-chassis-inventory format="json"> 相同。
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 版本 16.1 开始,Junos OS 对 JSON 格式发布的配置数据使用新的默认实施进行序列化。新的默认值 ietf在以下互联网草案中定义:
draft-ietf-netmod-yang-json-09, JSON 数据编码,采用 YANG 建模
draft-ietf-netmod-yang-metadata-06, 使用 YANG 定义和使用元数据
在早期版本中,默认值为 verbose,将所有对象作为 JSON 阵列发出。通过在层次结构级别配置适当的语句,可以配置 JSON 配置数据的 [edit system export-format json] 默认导出格式。您可以配置 verbose 从 Junos OS 版本 16.1R1 开始的语句,即使该语句要到更高版本才在 Junos OS CLI 中公开。
从 Junos OS 17.3R1 版开始,运行 Junos OS 支持的设备以紧凑的 JSON 格式发出设备的操作状态,其中只有具有多个值的对象才会作为 JSON 阵列发出。要将设备配置为发出紧凑的 JSON 格式,请在[edit system export-format state-data json]层次结构级别配置compact语句。
user@host# set system export-format state-data json compact
以下示例执行 show system uptime 命令并显示非紧凑型 JSON 格式的输出。
user@host> show system uptime | display json
非紧凑 JSON 格式:
{
"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"
}
]
}
]
}
]
}
相同命令的紧凑 JSON 格式为:
{
"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"
}
}
}