1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-07-15 01:24:29 +02:00

update markdown processor settings

This commit is contained in:
Kelly Brazil
2022-01-25 18:03:34 -08:00
parent 75cd84ce8a
commit 386f6c317e
89 changed files with 9348 additions and 9735 deletions

View File

@ -4,16 +4,16 @@
cd jc
echo Building docs for: package
pydoc-markdown -m jc > ../docs/readme.md
pydoc-markdown -m jc '{"processors": [{"type":"filter"},{"type":"pydocmd"}]}' > ../docs/readme.md
echo Building docs for: lib
pydoc-markdown -m jc.lib > ../docs/lib.md
pydoc-markdown -m jc.lib '{"processors": [{"type":"filter"},{"type":"pydocmd"}]}' > ../docs/lib.md
echo Building docs for: utils
pydoc-markdown -m jc.utils > ../docs/utils.md
pydoc-markdown -m jc.utils '{"processors": [{"type":"filter"},{"type":"pydocmd"}]}' > ../docs/utils.md
echo Building docs for: universal parser
pydoc-markdown -m jc.parsers.universal > ../docs/parsers/universal.md
pydoc-markdown -m jc.parsers.universal '{"processors": [{"type":"filter"},{"type":"pydocmd"}]}' > ../docs/parsers/universal.md
# a bit of inception here... jc is being used to help
# automate the generation of its own documentation. :)
@ -36,7 +36,7 @@ do
echo "Building docs for: ${parser_name}"
echo "[Home](https://kellyjonbrazil.github.io/jc/)" > ../docs/parsers/"${parser_name}".md
pydoc-markdown -m jc.parsers."${parser_name}" >> ../docs/parsers/"${parser_name}".md
pydoc-markdown -m jc.parsers."${parser_name}" '{"processors": [{"type":"filter"},{"type":"pydocmd"}]}' >> ../docs/parsers/"${parser_name}".md
echo "## Parser Information" >> ../docs/parsers/"${parser_name}".md
echo "Compatibility: ${compatible}" >> ../docs/parsers/"${parser_name}".md
echo >> ../docs/parsers/"${parser_name}".md

View File

@ -20,25 +20,24 @@ Parse the string data using the supplied parser module.
This function provides a high-level API to simplify parser use. This
function will call built-in parsers and custom plugin parsers.
**Example**:
Example:
>>> import jc
>>> jc.parse('date', 'Tue Jan 18 10:23:07 PST 2022')
- `{'year'` - 2022, 'month': 'Jan', 'month_num': 1, 'day'...}
{'year': 2022, 'month': 'Jan', 'month_num': 1, 'day'...}
To get a list of available parser module names, use `parser_mod_list()`
or `plugin_parser_mod_list()`. `plugin_parser_mod_list()` is a subset
of `parser_mod_list()`.
To get a list of available parser module names, use `parser_mod_list()`
or `plugin_parser_mod_list()`. `plugin_parser_mod_list()` is a subset
of `parser_mod_list()`.
You can also use the lower-level parser modules directly:
You can also use the lower-level parser modules directly:
>>> import jc.parsers.date
>>> jc.parsers.date.parse('Tue Jan 18 10:23:07 PST 2022')
Though, accessing plugin parsers directly is a bit more cumbersome, so
this higher-level API is recommended. Here is how you can access plugin
parsers without this API:
Though, accessing plugin parsers directly is a bit more cumbersome, so
this higher-level API is recommended. Here is how you can access plugin
parsers without this API:
>>> import os
>>> import sys
@ -49,29 +48,25 @@ function will call built-in parsers and custom plugin parsers.
>>> import my_custom_parser
>>> my_custom_parser.parse('command_data')
Parameters:
**Arguments**:
- `parser_mod_name` - (string) name of the parser module. This
parser_mod_name: (string) name of the parser module. This
function will accept module_name,
cli-name, and --argument-name
variants of the module name.
- `data` - (string or data to parse (string for normal
data: (string or data to parse (string for normal
iterator) parsers, iterator of strings for
streaming parsers)
- `raw` - (boolean) output preprocessed JSON if True
raw: (boolean) output preprocessed JSON if True
- `quiet` - (boolean) suppress warning messages if True
quiet: (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
(streaming parsers only)
**Returns**:
Returns:
Standard Parsers: Dictionary or List of Dictionaries
Streaming Parsers: Generator Object containing Dictionaries

View File

@ -7,145 +7,144 @@ jc - JSON CLI output utility `acpi` command output parser
Usage (cli):
$ acpi -V | jc --acpi
$ acpi -V | jc --acpi
or
or
$ jc acpi -V
$ jc acpi -V
Usage (module):
import jc
result = jc.parse('acpi', acpi_command_output)
import jc
result = jc.parse('acpi', acpi_command_output)
or
or
import jc.parsers.acpi
result = jc.parsers.acpi.parse(acpi_command_output)
import jc.parsers.acpi
result = jc.parsers.acpi.parse(acpi_command_output)
Schema:
[
{
"type": string,
"id": integer,
"state": string,
"charge_percent": integer,
"until_charged": string,
"until_charged_hours": integer,
"until_charged_minuts": integer,
"until_charged_seconds": integer,
"until_charged_total_seconds": integer,
"charge_remaining": string,
"charge_remaining_hours": integer,
"charge_remaining_minutes": integer,
"charge_remaining_seconds": integer,
"charge_remaining_total_seconds": integer,
"design_capacity_mah": integer,
"last_full_capacity": integer,
"last_full_capacity_percent": integer,
"on-line": boolean,
"mode": string,
"temperature": float,
"temperature_unit": string,
"trip_points": [
{
"id": integer,
"switches_to_mode": string,
"temperature": float,
"temperature_unit": string
}
],
"messages": [
string
]
}
]
**Examples**:
[
{
"type": string,
"id": integer,
"state": string,
"charge_percent": integer,
"until_charged": string,
"until_charged_hours": integer,
"until_charged_minuts": integer,
"until_charged_seconds": integer,
"until_charged_total_seconds": integer,
"charge_remaining": string,
"charge_remaining_hours": integer,
"charge_remaining_minutes": integer,
"charge_remaining_seconds": integer,
"charge_remaining_total_seconds": integer,
"design_capacity_mah": integer,
"last_full_capacity": integer,
"last_full_capacity_percent": integer,
"on-line": boolean,
"mode": string,
"temperature": float,
"temperature_unit": string,
"trip_points": [
{
"id": integer,
"switches_to_mode": string,
"temperature": float,
"temperature_unit": string
}
],
"messages": [
string
]
}
]
Examples:
$ acpi -V | jc --acpi -p
[
{
- `"type"` - "Battery",
- `"id"` - 0,
- `"state"` - "Charging",
- `"charge_percent"` - 71,
- `"until_charged"` - "00:29:20",
- `"design_capacity_mah"` - 2110,
- `"last_full_capacity"` - 2271,
- `"last_full_capacity_percent"` - 100,
- `"until_charged_hours"` - 0,
- `"until_charged_minutes"` - 29,
- `"until_charged_seconds"` - 20,
- `"until_charged_total_seconds"` - 1760
"type": "Battery",
"id": 0,
"state": "Charging",
"charge_percent": 71,
"until_charged": "00:29:20",
"design_capacity_mah": 2110,
"last_full_capacity": 2271,
"last_full_capacity_percent": 100,
"until_charged_hours": 0,
"until_charged_minutes": 29,
"until_charged_seconds": 20,
"until_charged_total_seconds": 1760
},
{
- `"type"` - "Adapter",
- `"id"` - 0,
- `"on-line"` - true
"type": "Adapter",
"id": 0,
"on-line": true
},
{
- `"type"` - "Thermal",
- `"id"` - 0,
- `"mode"` - "ok",
- `"temperature"` - 46.0,
- `"temperature_unit"` - "C",
- `"trip_points"` - [
"type": "Thermal",
"id": 0,
"mode": "ok",
"temperature": 46.0,
"temperature_unit": "C",
"trip_points": [
{
- `"id"` - 0,
- `"switches_to_mode"` - "critical",
- `"temperature"` - 127.0,
- `"temperature_unit"` - "C"
"id": 0,
"switches_to_mode": "critical",
"temperature": 127.0,
"temperature_unit": "C"
},
{
- `"id"` - 1,
- `"switches_to_mode"` - "hot",
- `"temperature"` - 127.0,
- `"temperature_unit"` - "C"
"id": 1,
"switches_to_mode": "hot",
"temperature": 127.0,
"temperature_unit": "C"
}
]
},
{
- `"type"` - "Cooling",
- `"id"` - 0,
- `"messages"` - [
"type": "Cooling",
"id": 0,
"messages": [
"Processor 0 of 10"
]
},
{
- `"type"` - "Cooling",
- `"id"` - 1,
- `"messages"` - [
"type": "Cooling",
"id": 1,
"messages": [
"Processor 0 of 10"
]
},
{
- `"type"` - "Cooling",
- `"id"` - 2,
- `"messages"` - [
"type": "Cooling",
"id": 2,
"messages": [
"x86_pkg_temp no state information available"
]
},
{
- `"type"` - "Cooling",
- `"id"` - 3,
- `"messages"` - [
"type": "Cooling",
"id": 3,
"messages": [
"Processor 0 of 10"
]
},
{
- `"type"` - "Cooling",
- `"id"` - 4,
- `"messages"` - [
"type": "Cooling",
"id": 4,
"messages": [
"intel_powerclamp no state information available"
]
},
{
- `"type"` - "Cooling",
- `"id"` - 5,
- `"messages"` - [
"type": "Cooling",
"id": 5,
"messages": [
"Processor 0 of 10"
]
}
@ -154,80 +153,80 @@ string
$ acpi -V | jc --acpi -p -r
[
{
- `"type"` - "Battery",
- `"id"` - "0",
- `"state"` - "Charging",
- `"charge_percent"` - "71",
- `"until_charged"` - "00:29:20",
- `"design_capacity_mah"` - "2110",
- `"last_full_capacity"` - "2271",
- `"last_full_capacity_percent"` - "100"
"type": "Battery",
"id": "0",
"state": "Charging",
"charge_percent": "71",
"until_charged": "00:29:20",
"design_capacity_mah": "2110",
"last_full_capacity": "2271",
"last_full_capacity_percent": "100"
},
{
- `"type"` - "Adapter",
- `"id"` - "0",
- `"on-line"` - true
"type": "Adapter",
"id": "0",
"on-line": true
},
{
- `"type"` - "Thermal",
- `"id"` - "0",
- `"mode"` - "ok",
- `"temperature"` - "46.0",
- `"temperature_unit"` - "C",
- `"trip_points"` - [
"type": "Thermal",
"id": "0",
"mode": "ok",
"temperature": "46.0",
"temperature_unit": "C",
"trip_points": [
{
- `"id"` - "0",
- `"switches_to_mode"` - "critical",
- `"temperature"` - "127.0",
- `"temperature_unit"` - "C"
"id": "0",
"switches_to_mode": "critical",
"temperature": "127.0",
"temperature_unit": "C"
},
{
- `"id"` - "1",
- `"switches_to_mode"` - "hot",
- `"temperature"` - "127.0",
- `"temperature_unit"` - "C"
"id": "1",
"switches_to_mode": "hot",
"temperature": "127.0",
"temperature_unit": "C"
}
]
},
{
- `"type"` - "Cooling",
- `"id"` - "0",
- `"messages"` - [
"type": "Cooling",
"id": "0",
"messages": [
"Processor 0 of 10"
]
},
{
- `"type"` - "Cooling",
- `"id"` - "1",
- `"messages"` - [
"type": "Cooling",
"id": "1",
"messages": [
"Processor 0 of 10"
]
},
{
- `"type"` - "Cooling",
- `"id"` - "2",
- `"messages"` - [
"type": "Cooling",
"id": "2",
"messages": [
"x86_pkg_temp no state information available"
]
},
{
- `"type"` - "Cooling",
- `"id"` - "3",
- `"messages"` - [
"type": "Cooling",
"id": "3",
"messages": [
"Processor 0 of 10"
]
},
{
- `"type"` - "Cooling",
- `"id"` - "4",
- `"messages"` - [
"type": "Cooling",
"id": "4",
"messages": [
"intel_powerclamp no state information available"
]
},
{
- `"type"` - "Cooling",
- `"id"` - "5",
- `"messages"` - [
"type": "Cooling",
"id": "5",
"messages": [
"Processor 0 of 10"
]
}
@ -253,16 +252,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -9,81 +9,80 @@ The `airport` program can be found at `/System/Library/PrivateFrameworks/Apple80
Usage (cli):
$ airport -I | jc --airport
$ airport -I | jc --airport
or
or
$ jc airport -I
$ jc airport -I
Usage (module):
import jc
result = jc.parse('airport', airport_command_output)
import jc
result = jc.parse('airport', airport_command_output)
or
or
import jc.parsers.airport
result = jc.parsers.airport.parse(airport_command_output)
import jc.parsers.airport
result = jc.parsers.airport.parse(airport_command_output)
Schema:
{
"agrctlrssi": integer,
"agrextrssi": integer,
"agrctlnoise": integer,
"agrextnoise": integer,
"state": string,
"op_mode": string,
"lasttxrate": integer,
"maxrate": integer,
"lastassocstatus": integer,
"802_11_auth": string,
"link_auth": string,
"bssid": string,
"ssid": string,
"mcs": integer,
"channel": string
}
**Examples**:
{
"agrctlrssi": integer,
"agrextrssi": integer,
"agrctlnoise": integer,
"agrextnoise": integer,
"state": string,
"op_mode": string,
"lasttxrate": integer,
"maxrate": integer,
"lastassocstatus": integer,
"802_11_auth": string,
"link_auth": string,
"bssid": string,
"ssid": string,
"mcs": integer,
"channel": string
}
Examples:
$ airport -I | jc --airport -p
{
- `"agrctlrssi"` - -66,
- `"agrextrssi"` - 0,
- `"agrctlnoise"` - -90,
- `"agrextnoise"` - 0,
- `"state"` - "running",
- `"op_mode"` - "station",
- `"lasttxrate"` - 195,
- `"maxrate"` - 867,
- `"lastassocstatus"` - 0,
- `"802_11_auth"` - "open",
- `"link_auth"` - "wpa2-psk",
- `"bssid"` - "3c:37:86:15:ad:f9",
- `"ssid"` - "SnazzleDazzle",
- `"mcs"` - 0,
- `"channel"` - "48,80"
"agrctlrssi": -66,
"agrextrssi": 0,
"agrctlnoise": -90,
"agrextnoise": 0,
"state": "running",
"op_mode": "station",
"lasttxrate": 195,
"maxrate": 867,
"lastassocstatus": 0,
"802_11_auth": "open",
"link_auth": "wpa2-psk",
"bssid": "3c:37:86:15:ad:f9",
"ssid": "SnazzleDazzle",
"mcs": 0,
"channel": "48,80"
}
$ airport -I | jc --airport -p -r
{
- `"agrctlrssi"` - "-66",
- `"agrextrssi"` - "0",
- `"agrctlnoise"` - "-90",
- `"agrextnoise"` - "0",
- `"state"` - "running",
- `"op_mode"` - "station",
- `"lasttxrate"` - "195",
- `"maxrate"` - "867",
- `"lastassocstatus"` - "0",
- `"802_11_auth"` - "open",
- `"link_auth"` - "wpa2-psk",
- `"bssid"` - "3c:37:86:15:ad:f9",
- `"ssid"` - "SnazzleDazzle",
- `"mcs"` - "0",
- `"channel"` - "48,80"
"agrctlrssi": "-66",
"agrextrssi": "0",
"agrctlnoise": "-90",
"agrextnoise": "0",
"state": "running",
"op_mode": "station",
"lasttxrate": "195",
"maxrate": "867",
"lastassocstatus": "0",
"802_11_auth": "open",
"link_auth": "wpa2-psk",
"bssid": "3c:37:86:15:ad:f9",
"ssid": "SnazzleDazzle",
"mcs": "0",
"channel": "48,80"
}
<a id="jc.parsers.airport.info"></a>
@ -106,16 +105,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -9,73 +9,72 @@ The `airport` program can be found at `/System/Library/PrivateFrameworks/Apple80
Usage (cli):
$ airport -s | jc --airport-s
$ airport -s | jc --airport-s
or
or
$ jc airport -s
$ jc airport -s
Usage (module):
import jc
result = jc.parse('airport_s', airport_s_command_output)
import jc
result = jc.parse('airport_s', airport_s_command_output)
or
or
import jc.parsers.airport_s
result = jc.parsers.airport_s.parse(airport_s_command_output)
import jc.parsers.airport_s
result = jc.parsers.airport_s.parse(airport_s_command_output)
Schema:
[
{
"ssid": string,
"bssid": string,
"rssi": integer,
"channel": string,
"ht": boolean,
"cc": string,
"security": [
string,
]
}
]
**Examples**:
[
{
"ssid": string,
"bssid": string,
"rssi": integer,
"channel": string,
"ht": boolean,
"cc": string,
"security": [
string,
]
}
]
Examples:
$ airport -s | jc --airport-s -p
[
{
- `"ssid"` - "DIRECT-4A-HP OfficeJet 3830",
- `"bssid"` - "00:67:eb:2a:a7:3b",
- `"rssi"` - -90,
- `"channel"` - "6",
- `"ht"` - true,
- `"cc"` - "--",
- `"security"` - [
"ssid": "DIRECT-4A-HP OfficeJet 3830",
"bssid": "00:67:eb:2a:a7:3b",
"rssi": -90,
"channel": "6",
"ht": true,
"cc": "--",
"security": [
"WPA2(PSK/AES/AES)"
]
},
{
- `"ssid"` - "Latitude38",
- `"bssid"` - "c0:ff:d5:d2:7a:f3",
- `"rssi"` - -85,
- `"channel"` - "11",
- `"ht"` - true,
- `"cc"` - "US",
- `"security"` - [
"ssid": "Latitude38",
"bssid": "c0:ff:d5:d2:7a:f3",
"rssi": -85,
"channel": "11",
"ht": true,
"cc": "US",
"security": [
"WPA2(PSK/AES/AES)"
]
},
{
- `"ssid"` - "xfinitywifi",
- `"bssid"` - "6e:e3:0e:b8:45:99",
- `"rssi"` - -83,
- `"channel"` - "11",
- `"ht"` - true,
- `"cc"` - "US",
- `"security"` - [
"ssid": "xfinitywifi",
"bssid": "6e:e3:0e:b8:45:99",
"rssi": -83,
"channel": "11",
"ht": true,
"cc": "US",
"security": [
"NONE"
]
},
@ -85,31 +84,31 @@ string,
$ airport -s | jc --airport -p -r
[
{
- `"ssid"` - "DIRECT-F3-HP ENVY 5660 series",
- `"bssid"` - "b0:5a:da:6f:0a:d4",
- `"rssi"` - "-93",
- `"channel"` - "1",
- `"ht"` - "Y",
- `"cc"` - "--",
- `"security"` - "WPA2(PSK/AES/AES)"
"ssid": "DIRECT-F3-HP ENVY 5660 series",
"bssid": "b0:5a:da:6f:0a:d4",
"rssi": "-93",
"channel": "1",
"ht": "Y",
"cc": "--",
"security": "WPA2(PSK/AES/AES)"
},
{
- `"ssid"` - "YouAreInfected-5",
- `"bssid"` - "5c:e3:0e:c2:85:da",
- `"rssi"` - "-85",
- `"channel"` - "36",
- `"ht"` - "Y",
- `"cc"` - "US",
- `"security"` - "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)"
"ssid": "YouAreInfected-5",
"bssid": "5c:e3:0e:c2:85:da",
"rssi": "-85",
"channel": "36",
"ht": "Y",
"cc": "US",
"security": "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)"
},
{
- `"ssid"` - "YuanFamily",
- `"bssid"` - "5c:e3:0e:b8:5f:9a",
- `"rssi"` - "-84",
- `"channel"` - "11",
- `"ht"` - "Y",
- `"cc"` - "US",
- `"security"` - "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)"
"ssid": "YuanFamily",
"bssid": "5c:e3:0e:b8:5f:9a",
"rssi": "-84",
"channel": "11",
"ht": "Y",
"cc": "US",
"security": "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)"
},
...
]
@ -134,16 +133,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -9,117 +9,116 @@ Supports `arp` and `arp -a` output.
Usage (cli):
$ arp | jc --arp
$ arp | jc --arp
or
or
$ jc arp
$ jc arp
Usage (module):
import jc
result = jc.parse('arp', arp_command_output)
import jc
result = jc.parse('arp', arp_command_output)
or
or
import jc.parsers.arp
result = jc.parsers.arp.parse(arp_command_output)
import jc.parsers.arp
result = jc.parsers.arp.parse(arp_command_output)
Schema:
[
{
"name": string,
"address": string,
"hwtype": string,
"hwaddress": string,
"flags_mask": string,
"iface": string,
"permanent": boolean,
"expires": integer
}
]
**Examples**:
[
{
"name": string,
"address": string,
"hwtype": string,
"hwaddress": string,
"flags_mask": string,
"iface": string,
"permanent": boolean,
"expires": integer
}
]
Examples:
$ arp | jc --arp -p
[
{
- `"address"` - "192.168.71.254",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:f0:98:26",
- `"flags_mask"` - "C",
- `"iface"` - "ens33"
"address": "192.168.71.254",
"hwtype": "ether",
"hwaddress": "00:50:56:f0:98:26",
"flags_mask": "C",
"iface": "ens33"
},
{
- `"address"` - "gateway",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:f7:4a:fc",
- `"flags_mask"` - "C",
- `"iface"` - "ens33"
"address": "gateway",
"hwtype": "ether",
"hwaddress": "00:50:56:f7:4a:fc",
"flags_mask": "C",
"iface": "ens33"
}
]
$ arp | jc --arp -p -r
[
{
- `"address"` - "gateway",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:f7:4a:fc",
- `"flags_mask"` - "C",
- `"iface"` - "ens33"
"address": "gateway",
"hwtype": "ether",
"hwaddress": "00:50:56:f7:4a:fc",
"flags_mask": "C",
"iface": "ens33"
},
{
- `"address"` - "192.168.71.254",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:fe:7a:b4",
- `"flags_mask"` - "C",
- `"iface"` - "ens33"
"address": "192.168.71.254",
"hwtype": "ether",
"hwaddress": "00:50:56:fe:7a:b4",
"flags_mask": "C",
"iface": "ens33"
}
]
$ arp -a | jc --arp -p
[
{
- `"name"` - null,
- `"address"` - "192.168.71.254",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:f0:98:26",
- `"iface"` - "ens33"
- `"permanent"` - false,
- `"expires"` - 1182
"name": null,
"address": "192.168.71.254",
"hwtype": "ether",
"hwaddress": "00:50:56:f0:98:26",
"iface": "ens33"
"permanent": false,
"expires": 1182
},
{
- `"name"` - "gateway",
- `"address"` - "192.168.71.2",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:f7:4a:fc",
- `"iface"` - "ens33"
- `"permanent"` - false,
- `"expires"` - 110
"name": "gateway",
"address": "192.168.71.2",
"hwtype": "ether",
"hwaddress": "00:50:56:f7:4a:fc",
"iface": "ens33"
"permanent": false,
"expires": 110
}
]
$ arp -a | jc --arp -p -r
[
{
- `"name"` - "?",
- `"address"` - "192.168.71.254",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:fe:7a:b4",
- `"iface"` - "ens33"
- `"permanent"` - false,
- `"expires"` - "1182"
"name": "?",
"address": "192.168.71.254",
"hwtype": "ether",
"hwaddress": "00:50:56:fe:7a:b4",
"iface": "ens33"
"permanent": false,
"expires": "1182"
},
{
- `"name"` - "_gateway",
- `"address"` - "192.168.71.2",
- `"hwtype"` - "ether",
- `"hwaddress"` - "00:50:56:f7:4a:fc",
- `"iface"` - "ens33"
- `"permanent"` - false,
- `"expires"` - "110"
"name": "_gateway",
"address": "192.168.71.2",
"hwtype": "ether",
"hwaddress": "00:50:56:f7:4a:fc",
"iface": "ens33"
"permanent": false,
"expires": "110"
}
]
@ -143,16 +142,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,122 +7,121 @@ jc - JSON CLI output utility `blkid` command output parser
Usage (cli):
$ blkid | jc --blkid
$ blkid | jc --blkid
or
or
$ jc blkid
$ jc blkid
Usage (module):
import jc
result = jc.parse('blkid', blkid_command_output)
import jc
result = jc.parse('blkid', blkid_command_output)
or
or
import jc.parsers.blkid
result = jc.parsers.blkid.parse(blkid_command_output)
import jc.parsers.blkid
result = jc.parsers.blkid.parse(blkid_command_output)
Schema:
[
{
"device": string,
"uuid": string,
"type": string,
"usage": string,
"part_entry_scheme": string,
"part_entry_type": string,
"part_entry_flags": string,
"part_entry_number": integer,
"part_entry_offset": integer,
"part_entry_size": integer,
"part_entry_disk": string,
"id_fs_uuid": string,
"id_fs_uuid_enc": string,
"id_fs_version": string,
"id_fs_type": string,
"id_fs_usage": string,
"id_part_entry_scheme": string,
"id_part_entry_type": string,
"id_part_entry_flags": string,
"id_part_entry_number": integer,
"id_part_entry_offset": integer,
"id_part_entry_size": integer,
"id_iolimit_minimum_io_size": integer,
"id_iolimit_physical_sector_size": integer,
"id_iolimit_logical_sector_size": integer,
"id_part_entry_disk": string,
"minimum_io_size": integer,
"physical_sector_size": integer,
"logical_sector_size": integer
}
]
**Examples**:
[
{
"device": string,
"uuid": string,
"type": string,
"usage": string,
"part_entry_scheme": string,
"part_entry_type": string,
"part_entry_flags": string,
"part_entry_number": integer,
"part_entry_offset": integer,
"part_entry_size": integer,
"part_entry_disk": string,
"id_fs_uuid": string,
"id_fs_uuid_enc": string,
"id_fs_version": string,
"id_fs_type": string,
"id_fs_usage": string,
"id_part_entry_scheme": string,
"id_part_entry_type": string,
"id_part_entry_flags": string,
"id_part_entry_number": integer,
"id_part_entry_offset": integer,
"id_part_entry_size": integer,
"id_iolimit_minimum_io_size": integer,
"id_iolimit_physical_sector_size": integer,
"id_iolimit_logical_sector_size": integer,
"id_part_entry_disk": string,
"minimum_io_size": integer,
"physical_sector_size": integer,
"logical_sector_size": integer
}
]
Examples:
$ blkid | jc --blkid -p
[
{
- `"device"` - "/dev/sda1",
- `"uuid"` - "05d927ab-5875-49e4-ada1-7f46cb32c932",
- `"type"` - "xfs"
"device": "/dev/sda1",
"uuid": "05d927ab-5875-49e4-ada1-7f46cb32c932",
"type": "xfs"
},
{
- `"device"` - "/dev/sda2",
- `"uuid"` - "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
- `"type"` - "LVM2_member"
"device": "/dev/sda2",
"uuid": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
"type": "LVM2_member"
},
{
- `"device"` - "/dev/mapper/centos-root",
- `"uuid"` - "07d718ff-950c-4e5b-98f0-42a1147c77d9",
- `"type"` - "xfs"
"device": "/dev/mapper/centos-root",
"uuid": "07d718ff-950c-4e5b-98f0-42a1147c77d9",
"type": "xfs"
},
{
- `"device"` - "/dev/mapper/centos-swap",
- `"uuid"` - "615eb89a-bcbf-46fd-80e3-c483ff5c931f",
- `"type"` - "swap"
"device": "/dev/mapper/centos-swap",
"uuid": "615eb89a-bcbf-46fd-80e3-c483ff5c931f",
"type": "swap"
}
]
$ sudo blkid -o udev -ip /dev/sda2 | jc --blkid -p
[
{
- `"id_fs_uuid"` - "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
- `"id_fs_uuid_enc"` - "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
- `"id_fs_version"` - "LVM2\\x20001",
- `"id_fs_type"` - "LVM2_member",
- `"id_fs_usage"` - "raid",
- `"id_iolimit_minimum_io_size"` - 512,
- `"id_iolimit_physical_sector_size"` - 512,
- `"id_iolimit_logical_sector_size"` - 512,
- `"id_part_entry_scheme"` - "dos",
- `"id_part_entry_type"` - "0x8e",
- `"id_part_entry_number"` - 2,
- `"id_part_entry_offset"` - 2099200,
- `"id_part_entry_size"` - 39843840,
- `"id_part_entry_disk"` - "8:0"
"id_fs_uuid": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
"id_fs_uuid_enc": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
"id_fs_version": "LVM2\\x20001",
"id_fs_type": "LVM2_member",
"id_fs_usage": "raid",
"id_iolimit_minimum_io_size": 512,
"id_iolimit_physical_sector_size": 512,
"id_iolimit_logical_sector_size": 512,
"id_part_entry_scheme": "dos",
"id_part_entry_type": "0x8e",
"id_part_entry_number": 2,
"id_part_entry_offset": 2099200,
"id_part_entry_size": 39843840,
"id_part_entry_disk": "8:0"
}
]
$ sudo blkid -ip /dev/sda1 | jc --blkid -p -r
[
{
- `"devname"` - "/dev/sda1",
- `"uuid"` - "05d927bb-5875-49e3-ada1-7f46cb31c932",
- `"type"` - "xfs",
- `"usage"` - "filesystem",
- `"minimum_io_size"` - "512",
- `"physical_sector_size"` - "512",
- `"logical_sector_size"` - "512",
- `"part_entry_scheme"` - "dos",
- `"part_entry_type"` - "0x83",
- `"part_entry_flags"` - "0x80",
- `"part_entry_number"` - "1",
- `"part_entry_offset"` - "2048",
- `"part_entry_size"` - "2097152",
- `"part_entry_disk"` - "8:0"
"devname": "/dev/sda1",
"uuid": "05d927bb-5875-49e3-ada1-7f46cb31c932",
"type": "xfs",
"usage": "filesystem",
"minimum_io_size": "512",
"physical_sector_size": "512",
"logical_sector_size": "512",
"part_entry_scheme": "dos",
"part_entry_type": "0x83",
"part_entry_flags": "0x80",
"part_entry_number": "1",
"part_entry_offset": "2048",
"part_entry_size": "2097152",
"part_entry_disk": "8:0"
}
]
@ -146,16 +145,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -11,51 +11,50 @@ This parser works with the following checksum calculation utilities:
Usage (cli):
$ cksum file.txt | jc --cksum
$ cksum file.txt | jc --cksum
or
or
$ jc cksum file.txt
$ jc cksum file.txt
Usage (module):
import jc
result = jc.parse('cksum', cksum_command_output)
import jc
result = jc.parse('cksum', cksum_command_output)
or
or
import jc.parsers.cksum
result = jc.parsers.cksum.parse(cksum_command_output)
import jc.parsers.cksum
result = jc.parsers.cksum.parse(cksum_command_output)
Schema:
[
{
"filename": string,
"checksum": integer,
"blocks": integer
}
]
**Examples**:
[
{
"filename": string,
"checksum": integer,
"blocks": integer
}
]
Examples:
$ cksum * | jc --cksum -p
[
{
- `"filename"` - "__init__.py",
- `"checksum"` - 4294967295,
- `"blocks"` - 0
"filename": "__init__.py",
"checksum": 4294967295,
"blocks": 0
},
{
- `"filename"` - "airport.py",
- `"checksum"` - 2208551092,
- `"blocks"` - 3745
"filename": "airport.py",
"checksum": 2208551092,
"blocks": 3745
},
{
- `"filename"` - "airport_s.py",
- `"checksum"` - 1113817598,
- `"blocks"` - 4572
"filename": "airport_s.py",
"checksum": 1113817598,
"blocks": 4572
},
...
]
@ -80,16 +79,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -10,171 +10,170 @@ Supports `crontab -l` command output and crontab files.
Usage (cli):
$ crontab -l | jc --crontab
$ crontab -l | jc --crontab
or
or
$ jc crontab -l
$ jc crontab -l
Usage (module):
import jc
result = jc.parse('crontab', crontab_output)
import jc
result = jc.parse('crontab', crontab_output)
or
or
import jc.parsers.crontab
result = jc.parsers.crontab.parse(crontab_output)
import jc.parsers.crontab
result = jc.parsers.crontab.parse(crontab_output)
Schema:
{
"variables": [
{
"name": string,
"value": string
}
],
"schedule": [
{
"occurrence" string,
"minute": [
string
],
"hour": [
string
],
"day_of_month": [
string
],
"month": [
string
],
"day_of_week": [
string
],
"occurrence": string,
"command": string
}
]
}
**Examples**:
{
"variables": [
{
"name": string,
"value": string
}
],
"schedule": [
{
"occurrence" string,
"minute": [
string
],
"hour": [
string
],
"day_of_month": [
string
],
"month": [
string
],
"day_of_week": [
string
],
"occurrence": string,
"command": string
}
]
}
Examples:
$ crontab -l | jc --crontab -p
{
- `"variables"` - [
"variables": [
{
- `"name"` - "MAILTO",
- `"value"` - "root"
"name": "MAILTO",
"value": "root"
},
{
- `"name"` - "PATH",
- `"value"` - "/sbin:/bin:/usr/sbin:/usr/bin"
"name": "PATH",
"value": "/sbin:/bin:/usr/sbin:/usr/bin"
},
{
- `"name"` - "SHELL",
- `"value"` - "/bin/bash"
"name": "SHELL",
"value": "/bin/bash"
}
],
- `"schedule"` - [
"schedule": [
{
- `"minute"` - [
"minute": [
"5"
],
- `"hour"` - [
"hour": [
"10-11",
"22"
],
- `"day_of_month"` - [
"day_of_month": [
"*"
],
- `"month"` - [
"month": [
"*"
],
- `"day_of_week"` - [
"day_of_week": [
"*"
],
- `"command"` - "/var/www/devdaily.com/bin/mk-new-links.php"
"command": "/var/www/devdaily.com/bin/mk-new-links.php"
},
{
- `"minute"` - [
"minute": [
"30"
],
- `"hour"` - [
"hour": [
"4/2"
],
- `"day_of_month"` - [
"day_of_month": [
"*"
],
- `"month"` - [
"month": [
"*"
],
- `"day_of_week"` - [
"day_of_week": [
"*"
],
- `"command"` - "/var/www/devdaily.com/bin/create-all-backups.sh"
"command": "/var/www/devdaily.com/bin/create-all-backups.sh"
},
{
- `"occurrence"` - "yearly",
- `"command"` - "/home/maverick/bin/annual-maintenance"
"occurrence": "yearly",
"command": "/home/maverick/bin/annual-maintenance"
},
{
- `"occurrence"` - "reboot",
- `"command"` - "/home/cleanup"
"occurrence": "reboot",
"command": "/home/cleanup"
},
{
- `"occurrence"` - "monthly",
- `"command"` - "/home/maverick/bin/tape-backup"
"occurrence": "monthly",
"command": "/home/maverick/bin/tape-backup"
}
]
}
$ cat /etc/crontab | jc --crontab -p -r
{
- `"variables"` - [
"variables": [
{
- `"name"` - "MAILTO",
- `"value"` - "root"
"name": "MAILTO",
"value": "root"
},
{
- `"name"` - "PATH",
- `"value"` - "/sbin:/bin:/usr/sbin:/usr/bin"
"name": "PATH",
"value": "/sbin:/bin:/usr/sbin:/usr/bin"
},
{
- `"name"` - "SHELL",
- `"value"` - "/bin/bash"
"name": "SHELL",
"value": "/bin/bash"
}
],
- `"schedule"` - [
"schedule": [
{
- `"minute"` - "5",
- `"hour"` - "10-11,22",
- `"day_of_month"` - "*",
- `"month"` - "*",
- `"day_of_week"` - "*",
- `"command"` - "/var/www/devdaily.com/bin/mk-new-links.php"
"minute": "5",
"hour": "10-11,22",
"day_of_month": "*",
"month": "*",
"day_of_week": "*",
"command": "/var/www/devdaily.com/bin/mk-new-links.php"
},
{
- `"minute"` - "30",
- `"hour"` - "4/2",
- `"day_of_month"` - "*",
- `"month"` - "*",
- `"day_of_week"` - "*",
- `"command"` - "/var/www/devdaily.com/bin/create-all-backups.sh"
"minute": "30",
"hour": "4/2",
"day_of_month": "*",
"month": "*",
"day_of_week": "*",
"command": "/var/www/devdaily.com/bin/create-all-backups.sh"
},
{
- `"occurrence"` - "yearly",
- `"command"` - "/home/maverick/bin/annual-maintenance"
"occurrence": "yearly",
"command": "/home/maverick/bin/annual-maintenance"
},
{
- `"occurrence"` - "reboot",
- `"command"` - "/home/cleanup"
"occurrence": "reboot",
"command": "/home/cleanup"
},
{
- `"occurrence"` - "monthly",
- `"command"` - "/home/maverick/bin/tape-backup"
"occurrence": "monthly",
"command": "/home/maverick/bin/tape-backup"
}
]
}
@ -199,16 +198,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -11,167 +11,166 @@ information for processes.
Usage (cli):
$ crontab -l | jc --crontab-u
$ crontab -l | jc --crontab-u
Usage (module):
import jc
result = jc.parse('crontab_u', crontab_u_output)
import jc
result = jc.parse('crontab_u', crontab_u_output)
or
or
import jc.parsers.crontab_u
result = jc.parsers.crontab_u.parse(crontab_u_output)
import jc.parsers.crontab_u
result = jc.parsers.crontab_u.parse(crontab_u_output)
Schema:
{
"variables": [
{
"name": string,
"value": string
}
],
"schedule": [
{
"occurrence" string,
"minute": [
string
],
"hour": [
string
],
"day_of_month": [
string
],
"month": [
string
],
"day_of_week": [
string
],
"occurrence": string,
"user": string,
"command": string
}
]
}
**Examples**:
{
"variables": [
{
"name": string,
"value": string
}
],
"schedule": [
{
"occurrence" string,
"minute": [
string
],
"hour": [
string
],
"day_of_month": [
string
],
"month": [
string
],
"day_of_week": [
string
],
"occurrence": string,
"user": string,
"command": string
}
]
}
Examples:
$ cat /etc/crontab | jc --crontab-u -p
{
- `"variables"` - [
"variables": [
{
- `"name"` - "PATH",
- `"value"` - "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sb..."
"name": "PATH",
"value": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sb..."
},
{
- `"name"` - "SHELL",
- `"value"` - "/bin/sh"
"name": "SHELL",
"value": "/bin/sh"
}
],
- `"schedule"` - [
"schedule": [
{
- `"minute"` - [
"minute": [
"25"
],
- `"hour"` - [
"hour": [
"6"
],
- `"day_of_month"` - [
"day_of_month": [
"*"
],
- `"month"` - [
"month": [
"*"
],
- `"day_of_week"` - [
"day_of_week": [
"*"
],
- `"user"` - "root",
- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
"user": "root",
"command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
},
{
- `"minute"` - [
"minute": [
"47"
],
- `"hour"` - [
"hour": [
"6"
],
- `"day_of_month"` - [
"day_of_month": [
"*"
],
- `"month"` - [
"month": [
"*"
],
- `"day_of_week"` - [
"day_of_week": [
"7"
],
- `"user"` - "root",
- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
"user": "root",
"command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
},
{
- `"minute"` - [
"minute": [
"52"
],
- `"hour"` - [
"hour": [
"6"
],
- `"day_of_month"` - [
"day_of_month": [
"1"
],
- `"month"` - [
"month": [
"*"
],
- `"day_of_week"` - [
"day_of_week": [
"*"
],
- `"user"` - "root",
- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
"user": "root",
"command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
}
]
}
$ cat /etc/crontab | jc --crontab-u -p -r
{
- `"variables"` - [
"variables": [
{
- `"name"` - "PATH",
- `"value"` - "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/..."
"name": "PATH",
"value": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/..."
},
{
- `"name"` - "SHELL",
- `"value"` - "/bin/sh"
"name": "SHELL",
"value": "/bin/sh"
}
],
- `"schedule"` - [
"schedule": [
{
- `"minute"` - "25",
- `"hour"` - "6",
- `"day_of_month"` - "*",
- `"month"` - "*",
- `"day_of_week"` - "*",
- `"user"` - "root",
- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
"minute": "25",
"hour": "6",
"day_of_month": "*",
"month": "*",
"day_of_week": "*",
"user": "root",
"command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
},
{
- `"minute"` - "47",
- `"hour"` - "6",
- `"day_of_month"` - "*",
- `"month"` - "*",
- `"day_of_week"` - "7",
- `"user"` - "root",
- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
"minute": "47",
"hour": "6",
"day_of_month": "*",
"month": "*",
"day_of_week": "7",
"user": "root",
"command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
},
{
- `"minute"` - "52",
- `"hour"` - "6",
- `"day_of_month"` - "1",
- `"month"` - "*",
- `"day_of_week"` - "*",
- `"user"` - "root",
- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
"minute": "52",
"hour": "6",
"day_of_month": "1",
"month": "*",
"day_of_week": "*",
"user": "root",
"command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..."
}
]
}
@ -196,16 +195,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -11,32 +11,31 @@ The first row of the file must be a header row.
Usage (cli):
$ cat file.csv | jc --csv
$ cat file.csv | jc --csv
Usage (module):
import jc
result = jc.parse('csv', csv_output)
import jc
result = jc.parse('csv', csv_output)
or
or
import jc.parsers.csv
result = jc.parsers.csv.parse(csv_output)
import jc.parsers.csv
result = jc.parsers.csv.parse(csv_output)
Schema:
csv file converted to a Dictionary:
https://docs.python.org/3/library/csv.html
csv file converted to a Dictionary:
https://docs.python.org/3/library/csv.html
[
{
"column_name1": string,
"column_name2": string
}
]
**Examples**:
[
{
"column_name1": string,
"column_name2": string
}
]
Examples:
$ cat homes.csv
"Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres"...
@ -48,37 +47,37 @@ https://docs.python.org/3/library/csv.html
$ cat homes.csv | jc --csv -p
[
{
- `"Sell"` - "142",
- `"List"` - "160",
- `"Living"` - "28",
- `"Rooms"` - "10",
- `"Beds"` - "5",
- `"Baths"` - "3",
- `"Age"` - "60",
- `"Acres"` - "0.28",
- `"Taxes"` - "3167"
"Sell": "142",
"List": "160",
"Living": "28",
"Rooms": "10",
"Beds": "5",
"Baths": "3",
"Age": "60",
"Acres": "0.28",
"Taxes": "3167"
},
{
- `"Sell"` - "175",
- `"List"` - "180",
- `"Living"` - "18",
- `"Rooms"` - "8",
- `"Beds"` - "4",
- `"Baths"` - "1",
- `"Age"` - "12",
- `"Acres"` - "0.43",
- `"Taxes"` - "4033"
"Sell": "175",
"List": "180",
"Living": "18",
"Rooms": "8",
"Beds": "4",
"Baths": "1",
"Age": "12",
"Acres": "0.43",
"Taxes": "4033"
},
{
- `"Sell"` - "129",
- `"List"` - "132",
- `"Living"` - "13",
- `"Rooms"` - "6",
- `"Beds"` - "3",
- `"Baths"` - "1",
- `"Age"` - "41",
- `"Acres"` - "0.33",
- `"Taxes"` - "1471"
"Sell": "129",
"List": "132",
"Living": "13",
"Rooms": "6",
"Beds": "3",
"Baths": "1",
"Age": "41",
"Acres": "0.33",
"Taxes": "1471"
},
...
]
@ -103,16 +102,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -16,45 +16,44 @@ then the rest of the rows are loaded lazily.
Usage (cli):
$ cat file.csv | jc --csv-s
$ cat file.csv | jc --csv-s
Usage (module):
import jc
# result is an iterable object (generator)
result = jc.parse('csv_s', csv_output.splitlines())
for item in result:
# do something
import jc
# result is an iterable object (generator)
result = jc.parse('csv_s', csv_output.splitlines())
for item in result:
# do something
or
or
import jc.parsers.csv_s
# result is an iterable object (generator)
result = jc.parsers.csv_s.parse(csv_output.splitlines())
for item in result:
# do something
import jc.parsers.csv_s
# result is an iterable object (generator)
result = jc.parsers.csv_s.parse(csv_output.splitlines())
for item in result:
# do something
Schema:
csv file converted to a Dictionary:
https://docs.python.org/3/library/csv.html
csv file converted to a Dictionary:
https://docs.python.org/3/library/csv.html
{
"column_name1": string,
"column_name2": string,
{
"column_name1": string,
"column_name2": string,
# below object only exists if using -qq or ignore_exceptions=True
# below object only exists if using -qq or ignore_exceptions=True
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
**Examples**:
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
Examples:
$ cat homes.csv
"Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres"...
@ -89,25 +88,20 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False)
Main text parsing generator function. Returns an iterator object.
**Arguments**:
Parameters:
- `data` - (iterable) line-based text data to parse
data: (iterable) line-based text data to parse
(e.g. sys.stdin or str.splitlines())
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
**Yields**:
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
Yields:
Dictionary. Raw or processed structured data.
**Returns**:
Returns:
Iterator object

View File

@ -13,74 +13,73 @@ available if the timezone field is UTC.
Usage (cli):
$ date | jc --date
$ date | jc --date
or
or
$ jc date
$ jc date
Usage (module):
import jc
result = jc.parse('date', date_command_output)
import jc
result = jc.parse('date', date_command_output)
or
or
import jc.parsers.date
result = jc.parsers.date.parse(date_command_output)
import jc.parsers.date
result = jc.parsers.date.parse(date_command_output)
Schema:
{
"year": integer,
"month": string,
"month_num": integer,
"day": integer,
"weekday": string,
"weekday_num": integer,
"hour": integer,
"hour_24": integer,
"minute": integer,
"second": integer,
"period": string,
"timezone": string,
"utc_offset": string, # null if timezone field is not UTC
"day_of_year": integer,
"week_of_year": integer,
"iso": string,
"epoch": integer, # [0]
"epoch_utc": integer, # [1]
"timezone_aware": boolean # [2]
}
{
"year": integer,
"month": string,
"month_num": integer,
"day": integer,
"weekday": string,
"weekday_num": integer,
"hour": integer,
"hour_24": integer,
"minute": integer,
"second": integer,
"period": string,
"timezone": string,
"utc_offset": string, # null if timezone field is not UTC
"day_of_year": integer,
"week_of_year": integer,
"iso": string,
"epoch": integer, # [0]
"epoch_utc": integer, # [1]
"timezone_aware": boolean # [2]
}
[0] naive timestamp
[1] timezone-aware timestamp. Only available if timezone field is UTC
[2] if true, all fields are correctly based on UTC
**Examples**:
[0] naive timestamp
[1] timezone-aware timestamp. Only available if timezone field is UTC
[2] if true, all fields are correctly based on UTC
Examples:
$ date | jc --date -p
{
- `"year"` - 2021,
- `"month"` - "Mar",
- `"month_num"` - 3,
- `"day"` - 25,
- `"weekday"` - "Thu",
- `"weekday_num"` - 4,
- `"hour"` - 2,
- `"hour_24"` - 2,
- `"minute"` - 2,
- `"second"` - 26,
- `"period"` - "AM",
- `"timezone"` - "UTC",
- `"utc_offset"` - "+0000",
- `"day_of_year"` - 84,
- `"week_of_year"` - 12,
- `"iso"` - "2021-03-25T02:02:26+00:00",
- `"epoch"` - 1616662946,
- `"epoch_utc"` - 1616637746,
- `"timezone_aware"` - true
"year": 2021,
"month": "Mar",
"month_num": 3,
"day": 25,
"weekday": "Thu",
"weekday_num": 4,
"hour": 2,
"hour_24": 2,
"minute": 2,
"second": 26,
"period": "AM",
"timezone": "UTC",
"utc_offset": "+0000",
"day_of_year": 84,
"week_of_year": 12,
"iso": "2021-03-25T02:02:26+00:00",
"epoch": 1616662946,
"epoch_utc": 1616637746,
"timezone_aware": true
}
<a id="jc.parsers.date.info"></a>
@ -103,16 +102,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -7,69 +7,68 @@ jc - JSON CLI output utility `df` command output parser
Usage (cli):
$ df | jc --df
$ df | jc --df
or
or
$ jc df
$ jc df
Usage (module):
import jc
result = jc.parse('df', df_command_output)
import jc
result = jc.parse('df', df_command_output)
or
or
import jc.parsers.df
result = jc.parsers.df.parse(df_command_output)
import jc.parsers.df
result = jc.parsers.df.parse(df_command_output)
Schema:
[
{
"filesystem": string,
"size": string,
"1k_blocks": integer,
"512_blocks": integer,
"used": integer,
"available": integer,
"capacity_percent": integer,
"ifree": integer,
"iused": integer,
"use_percent": integer,
"iused_percent": integer,
"mounted_on": string
}
]
**Examples**:
[
{
"filesystem": string,
"size": string,
"1k_blocks": integer,
"512_blocks": integer,
"used": integer,
"available": integer,
"capacity_percent": integer,
"ifree": integer,
"iused": integer,
"use_percent": integer,
"iused_percent": integer,
"mounted_on": string
}
]
Examples:
$ df | jc --df -p
[
{
- `"filesystem"` - "devtmpfs",
- `"1k_blocks"` - 1918820,
- `"used"` - 0,
- `"available"` - 1918820,
- `"use_percent"` - 0,
- `"mounted_on"` - "/dev"
"filesystem": "devtmpfs",
"1k_blocks": 1918820,
"used": 0,
"available": 1918820,
"use_percent": 0,
"mounted_on": "/dev"
},
{
- `"filesystem"` - "tmpfs",
- `"1k_blocks"` - 1930668,
- `"used"` - 0,
- `"available"` - 1930668,
- `"use_percent"` - 0,
- `"mounted_on"` - "/dev/shm"
"filesystem": "tmpfs",
"1k_blocks": 1930668,
"used": 0,
"available": 1930668,
"use_percent": 0,
"mounted_on": "/dev/shm"
},
{
- `"filesystem"` - "tmpfs",
- `"1k_blocks"` - 1930668,
- `"used"` - 11800,
- `"available"` - 1918868,
- `"use_percent"` - 1,
- `"mounted_on"` - "/run"
"filesystem": "tmpfs",
"1k_blocks": 1930668,
"used": 11800,
"available": 1918868,
"use_percent": 1,
"mounted_on": "/run"
},
...
]
@ -77,28 +76,28 @@ Schema:
$ df | jc --df -p -r
[
{
- `"filesystem"` - "devtmpfs",
- `"1k_blocks"` - "1918820",
- `"used"` - "0",
- `"available"` - "1918820",
- `"use_percent"` - "0%",
- `"mounted_on"` - "/dev"
"filesystem": "devtmpfs",
"1k_blocks": "1918820",
"used": "0",
"available": "1918820",
"use_percent": "0%",
"mounted_on": "/dev"
},
{
- `"filesystem"` - "tmpfs",
- `"1k_blocks"` - "1930668",
- `"used"` - "0",
- `"available"` - "1930668",
- `"use_percent"` - "0%",
- `"mounted_on"` - "/dev/shm"
"filesystem": "tmpfs",
"1k_blocks": "1930668",
"used": "0",
"available": "1930668",
"use_percent": "0%",
"mounted_on": "/dev/shm"
},
{
- `"filesystem"` - "tmpfs",
- `"1k_blocks"` - "1930668",
- `"used"` - "11800",
- `"available"` - "1918868",
- `"use_percent"` - "1%",
- `"mounted_on"` - "/run"
"filesystem": "tmpfs",
"1k_blocks": "1930668",
"used": "11800",
"available": "1918868",
"use_percent": "1%",
"mounted_on": "/run"
},
...
]
@ -123,16 +122,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,7 +7,7 @@ jc - JSON CLI output utility `dig` command output parser
Options supported:
- `+noall +answer` options are supported in cases where only the answer
information is desired.
information is desired.
- `+axfr` option is supported on its own
The `when_epoch` calculated timestamp field is naive. (i.e. based on the
@ -18,311 +18,310 @@ only available if the timezone field is UTC.
Usage (cli):
$ dig example.com | jc --dig
$ dig example.com | jc --dig
or
or
$ jc dig example.com
$ jc dig example.com
Usage (module):
import jc
result = jc.parse('dig', dig_command_output)
import jc
result = jc.parse('dig', dig_command_output)
or
or
import jc.parsers.dig
result = jc.parsers.dig.parse(dig_command_output)
import jc.parsers.dig
result = jc.parsers.dig.parse(dig_command_output)
Schema:
[
{
"id": integer,
"opcode": string,
"status": string,
"flags": [
string
],
"query_num": integer,
"answer_num": integer,
"authority_num": integer,
"additional_num": integer,
"axfr": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"opt_pseudosection": {
"edns": {
"version": integer,
"flags": [
string
],
"udp": integer
},
"cookie": string
},
"question": {
"name": string,
"class": string,
"type": string
},
"answer": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"additional": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"authority": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"query_size": integer,
"query_time": integer, # in msec
"server": string,
"when": string,
"when_epoch": integer, # [0]
"when_epoch_utc": integer, # [1]
"rcvd": integer
"size": string
}
]
[
{
"id": integer,
"opcode": string,
"status": string,
"flags": [
string
],
"query_num": integer,
"answer_num": integer,
"authority_num": integer,
"additional_num": integer,
"axfr": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"opt_pseudosection": {
"edns": {
"version": integer,
"flags": [
string
],
"udp": integer
},
"cookie": string
},
"question": {
"name": string,
"class": string,
"type": string
},
"answer": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"additional": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"authority": [
{
"name": string,
"class": string,
"type": string,
"ttl": integer,
"data": string
}
],
"query_size": integer,
"query_time": integer, # in msec
"server": string,
"when": string,
"when_epoch": integer, # [0]
"when_epoch_utc": integer, # [1]
"rcvd": integer
"size": string
}
]
[0] naive timestamp if "when" field is parsable, else null
[1] timezone aware timestamp availabe for UTC, else null
**Examples**:
[0] naive timestamp if "when" field is parsable, else null
[1] timezone aware timestamp availabe for UTC, else null
Examples:
$ dig example.com | jc --dig -p
[
{
- `"id"` - 2951,
- `"opcode"` - "QUERY",
- `"status"` - "NOERROR",
- `"flags"` - [
"id": 2951,
"opcode": "QUERY",
"status": "NOERROR",
"flags": [
"qr",
"rd",
"ra"
],
- `"query_num"` - 1,
- `"answer_num"` - 1,
- `"authority_num"` - 0,
- `"additional_num"` - 1,
- `"opt_pseudosection"` - {
- `"edns"` - {
- `"version"` - 0,
- `"flags"` - [],
- `"udp"` - 4096
"query_num": 1,
"answer_num": 1,
"authority_num": 0,
"additional_num": 1,
"opt_pseudosection": {
"edns": {
"version": 0,
"flags": [],
"udp": 4096
}
},
- `"question"` - {
- `"name"` - "example.com.",
- `"class"` - "IN",
- `"type"` - "A"
"question": {
"name": "example.com.",
"class": "IN",
"type": "A"
},
- `"answer"` - [
"answer": [
{
- `"name"` - "example.com.",
- `"class"` - "IN",
- `"type"` - "A",
- `"ttl"` - 39302,
- `"data"` - "93.184.216.34"
"name": "example.com.",
"class": "IN",
"type": "A",
"ttl": 39302,
"data": "93.184.216.34"
}
],
- `"query_time"` - 49,
- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
- `"when"` - "Fri Apr 16 16:05:10 PDT 2021",
- `"rcvd"` - 56,
- `"when_epoch"` - 1618614310,
- `"when_epoch_utc"` - null
"query_time": 49,
"server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
"when": "Fri Apr 16 16:05:10 PDT 2021",
"rcvd": 56,
"when_epoch": 1618614310,
"when_epoch_utc": null
}
]
$ dig cnn.com www.cnn.com @205.251.194.64 | jc --dig -p -r
[
{
- `"id"` - "46052",
- `"opcode"` - "QUERY",
- `"status"` - "NOERROR",
- `"flags"` - [
"id": "46052",
"opcode": "QUERY",
"status": "NOERROR",
"flags": [
"qr",
"rd",
"ra"
],
- `"query_num"` - "1",
- `"answer_num"` - "1",
- `"authority_num"` - "0",
- `"additional_num"` - "1",
- `"opt_pseudosection"` - {
- `"edns"` - {
- `"version"` - "0",
- `"flags"` - [],
- `"udp"` - "4096"
"query_num": "1",
"answer_num": "1",
"authority_num": "0",
"additional_num": "1",
"opt_pseudosection": {
"edns": {
"version": "0",
"flags": [],
"udp": "4096"
}
},
- `"question"` - {
- `"name"` - "example.com.",
- `"class"` - "IN",
- `"type"` - "A"
"question": {
"name": "example.com.",
"class": "IN",
"type": "A"
},
- `"answer"` - [
"answer": [
{
- `"name"` - "example.com.",
- `"class"` - "IN",
- `"type"` - "A",
- `"ttl"` - "40426",
- `"data"` - "93.184.216.34"
"name": "example.com.",
"class": "IN",
"type": "A",
"ttl": "40426",
"data": "93.184.216.34"
}
],
- `"query_time"` - "48 msec",
- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
- `"when"` - "Fri Apr 16 16:06:12 PDT 2021",
- `"rcvd"` - "56"
"query_time": "48 msec",
"server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
"when": "Fri Apr 16 16:06:12 PDT 2021",
"rcvd": "56"
}
]
$ dig -x 1.1.1.1 | jc --dig -p
[
{
- `"id"` - 20785,
- `"opcode"` - "QUERY",
- `"status"` - "NOERROR",
- `"flags"` - [
"id": 20785,
"opcode": "QUERY",
"status": "NOERROR",
"flags": [
"qr",
"rd",
"ra"
],
- `"query_num"` - 1,
- `"answer_num"` - 1,
- `"authority_num"` - 0,
- `"additional_num"` - 1,
- `"opt_pseudosection"` - {
- `"edns"` - {
- `"version"` - 0,
- `"flags"` - [],
- `"udp"` - 4096
"query_num": 1,
"answer_num": 1,
"authority_num": 0,
"additional_num": 1,
"opt_pseudosection": {
"edns": {
"version": 0,
"flags": [],
"udp": 4096
}
},
- `"question"` - {
- `"name"` - "1.1.1.1.in-addr.arpa.",
- `"class"` - "IN",
- `"type"` - "PTR"
"question": {
"name": "1.1.1.1.in-addr.arpa.",
"class": "IN",
"type": "PTR"
},
- `"answer"` - [
"answer": [
{
- `"name"` - "1.1.1.1.in-addr.arpa.",
- `"class"` - "IN",
- `"type"` - "PTR",
- `"ttl"` - 1800,
- `"data"` - "one.one.one.one."
"name": "1.1.1.1.in-addr.arpa.",
"class": "IN",
"type": "PTR",
"ttl": 1800,
"data": "one.one.one.one."
}
],
- `"query_time"` - 40,
- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
- `"when"` - "Sat Apr 17 14:50:50 PDT 2021",
- `"rcvd"` - 78,
- `"when_epoch"` - 1618696250,
- `"when_epoch_utc"` - null
"query_time": 40,
"server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
"when": "Sat Apr 17 14:50:50 PDT 2021",
"rcvd": 78,
"when_epoch": 1618696250,
"when_epoch_utc": null
}
]
$ dig -x 1.1.1.1 | jc --dig -p -r
[
{
- `"id"` - "32644",
- `"opcode"` - "QUERY",
- `"status"` - "NOERROR",
- `"flags"` - [
"id": "32644",
"opcode": "QUERY",
"status": "NOERROR",
"flags": [
"qr",
"rd",
"ra"
],
- `"query_num"` - "1",
- `"answer_num"` - "1",
- `"authority_num"` - "0",
- `"additional_num"` - "1",
- `"opt_pseudosection"` - {
- `"edns"` - {
- `"version"` - "0",
- `"flags"` - [],
- `"udp"` - "4096"
"query_num": "1",
"answer_num": "1",
"authority_num": "0",
"additional_num": "1",
"opt_pseudosection": {
"edns": {
"version": "0",
"flags": [],
"udp": "4096"
}
},
- `"question"` - {
- `"name"` - "1.1.1.1.in-addr.arpa.",
- `"class"` - "IN",
- `"type"` - "PTR"
"question": {
"name": "1.1.1.1.in-addr.arpa.",
"class": "IN",
"type": "PTR"
},
- `"answer"` - [
"answer": [
{
- `"name"` - "1.1.1.1.in-addr.arpa.",
- `"class"` - "IN",
- `"type"` - "PTR",
- `"ttl"` - "1800",
- `"data"` - "one.one.one.one."
"name": "1.1.1.1.in-addr.arpa.",
"class": "IN",
"type": "PTR",
"ttl": "1800",
"data": "one.one.one.one."
}
],
- `"query_time"` - "52 msec",
- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
- `"when"` - "Sat Apr 17 14:51:46 PDT 2021",
- `"rcvd"` - "78"
"query_time": "52 msec",
"server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
"when": "Sat Apr 17 14:51:46 PDT 2021",
"rcvd": "78"
}
]
$ dig +noall +answer cnn.com | jc --dig -p
[
{
- `"answer"` - [
"answer": [
{
- `"name"` - "cnn.com.",
- `"class"` - "IN",
- `"type"` - "A",
- `"ttl"` - 60,
- `"data"` - "151.101.193.67"
"name": "cnn.com.",
"class": "IN",
"type": "A",
"ttl": 60,
"data": "151.101.193.67"
},
{
- `"name"` - "cnn.com.",
- `"class"` - "IN",
- `"type"` - "A",
- `"ttl"` - 60,
- `"data"` - "151.101.65.67"
"name": "cnn.com.",
"class": "IN",
"type": "A",
"ttl": 60,
"data": "151.101.65.67"
},
{
- `"name"` - "cnn.com.",
- `"class"` - "IN",
- `"type"` - "A",
- `"ttl"` - 60,
- `"data"` - "151.101.1.67"
"name": "cnn.com.",
"class": "IN",
"type": "A",
"ttl": 60,
"data": "151.101.1.67"
},
{
- `"name"` - "cnn.com.",
- `"class"` - "IN",
- `"type"` - "A",
- `"ttl"` - 60,
- `"data"` - "151.101.129.67"
"name": "cnn.com.",
"class": "IN",
"type": "A",
"ttl": 60,
"data": "151.101.129.67"
}
]
}
@ -348,16 +347,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -19,72 +19,71 @@ time of the system the parser is run on)
Usage (cli):
C:> dir | jc --dir
C:> dir | jc --dir
Usage (module):
import jc
result = jc.parse('dir', dir_command_output)
import jc
result = jc.parse('dir', dir_command_output)
or
or
import jc.parsers.dir
result = jc.parsers.dir.parse(dir_command_output)
import jc.parsers.dir
result = jc.parsers.dir.parse(dir_command_output)
Schema:
[
{
"date": string,
"time": string,
"epoch": integer, # naive timestamp
"dir": boolean,
"size": integer,
"filename: string,
"parent": string
}
]
**Examples**:
[
{
"date": string,
"time": string,
"epoch": integer, # naive timestamp
"dir": boolean,
"size": integer,
"filename: string,
"parent": string
}
]
Examples:
C:> dir | jc --dir -p
[
{
- `"date"` - "03/24/2021",
- `"time"` - "03:15 PM",
- `"dir"` - true,
- `"size"` - null,
- `"filename"` - ".",
- `"parent"` - "C:\\Program Files\\Internet Explorer",
- `"epoch"` - 1616624100
"date": "03/24/2021",
"time": "03:15 PM",
"dir": true,
"size": null,
"filename": ".",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1616624100
},
{
- `"date"` - "03/24/2021",
- `"time"` - "03:15 PM",
- `"dir"` - true,
- `"size"` - null,
- `"filename"` - "..",
- `"parent"` - "C:\\Program Files\\Internet Explorer",
- `"epoch"` - 1616624100
"date": "03/24/2021",
"time": "03:15 PM",
"dir": true,
"size": null,
"filename": "..",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1616624100
},
{
- `"date"` - "12/07/2019",
- `"time"` - "02:49 AM",
- `"dir"` - true,
- `"size"` - null,
- `"filename"` - "en-US",
- `"parent"` - "C:\\Program Files\\Internet Explorer",
- `"epoch"` - 1575715740
"date": "12/07/2019",
"time": "02:49 AM",
"dir": true,
"size": null,
"filename": "en-US",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1575715740
},
{
- `"date"` - "12/07/2019",
- `"time"` - "02:09 AM",
- `"dir"` - false,
- `"size"` - 54784,
- `"filename"` - "ExtExport.exe",
- `"parent"` - "C:\\Program Files\\Internet Explorer",
- `"epoch"` - 1575713340
"date": "12/07/2019",
"time": "02:09 AM",
"dir": false,
"size": 54784,
"filename": "ExtExport.exe",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1575713340
},
...
]
@ -92,36 +91,36 @@ Schema:
C:> dir | jc --dir -p -r
[
{
- `"date"` - "03/24/2021",
- `"time"` - "03:15 PM",
- `"dir"` - true,
- `"size"` - null,
- `"filename"` - ".",
- `"parent"` - "C:\\Program Files\\Internet Explorer"
"date": "03/24/2021",
"time": "03:15 PM",
"dir": true,
"size": null,
"filename": ".",
"parent": "C:\\Program Files\\Internet Explorer"
},
{
- `"date"` - "03/24/2021",
- `"time"` - "03:15 PM",
- `"dir"` - true,
- `"size"` - null,
- `"filename"` - "..",
- `"parent"` - "C:\\Program Files\\Internet Explorer"
"date": "03/24/2021",
"time": "03:15 PM",
"dir": true,
"size": null,
"filename": "..",
"parent": "C:\\Program Files\\Internet Explorer"
},
{
- `"date"` - "12/07/2019",
- `"time"` - "02:49 AM",
- `"dir"` - true,
- `"size"` - null,
- `"filename"` - "en-US",
- `"parent"` - "C:\\Program Files\\Internet Explorer"
"date": "12/07/2019",
"time": "02:49 AM",
"dir": true,
"size": null,
"filename": "en-US",
"parent": "C:\\Program Files\\Internet Explorer"
},
{
- `"date"` - "12/07/2019",
- `"time"` - "02:09 AM",
- `"dir"` - false,
- `"size"` - "54,784",
- `"filename"` - "ExtExport.exe",
- `"parent"` - "C:\\Program Files\\Internet Explorer"
"date": "12/07/2019",
"time": "02:09 AM",
"dir": false,
"size": "54,784",
"filename": "ExtExport.exe",
"parent": "C:\\Program Files\\Internet Explorer"
},
...
]
@ -146,16 +145,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,57 +7,56 @@ jc - JSON CLI output utility `dmidecode` command output parser
Usage (cli):
$ dmidecode | jc --dmidecode
$ dmidecode | jc --dmidecode
or
or
$ jc dmidecode
$ jc dmidecode
Usage (module):
import jc
result = jc.parse('dmidecode', dmidecode_command_output)
import jc
result = jc.parse('dmidecode', dmidecode_command_output)
or
or
import jc.parsers.dmidecode
result = jc.parsers.dmidecode.parse(dmidecode_command_output)
import jc.parsers.dmidecode
result = jc.parsers.dmidecode.parse(dmidecode_command_output)
Schema:
[
{
"handle": string,
"type": integer,
"bytes": integer,
"description": string,
"values": { # null if empty
"lowercase_no_spaces_keys": string,
"multiline_key_values": [
string,
]
}
}
]
**Examples**:
[
{
"handle": string,
"type": integer,
"bytes": integer,
"description": string,
"values": { # null if empty
"lowercase_no_spaces_keys": string,
"multiline_key_values": [
string,
]
}
}
]
Examples:
# dmidecode | jc --dmidecode -p
[
{
- `"handle"` - "0x0000",
- `"type"` - 0,
- `"bytes"` - 24,
- `"description"` - "BIOS Information",
- `"values"` - {
- `"vendor"` - "Phoenix Technologies LTD",
- `"version"` - "6.00",
- `"release_date"` - "04/13/2018",
- `"address"` - "0xEA490",
- `"runtime_size"` - "88944 bytes",
- `"rom_size"` - "64 kB",
- `"characteristics"` - [
"handle": "0x0000",
"type": 0,
"bytes": 24,
"description": "BIOS Information",
"values": {
"vendor": "Phoenix Technologies LTD",
"version": "6.00",
"release_date": "04/13/2018",
"address": "0xEA490",
"runtime_size": "88944 bytes",
"rom_size": "64 kB",
"characteristics": [
"ISA is supported",
"PCI is supported",
"PC Card (PCMCIA) is supported",
@ -80,8 +79,8 @@ string,
"Function key-initiated network boot is supported",
"Targeted content distribution is supported"
],
- `"bios_revision"` - "4.6",
- `"firmware_revision"` - "0.0"
"bios_revision": "4.6",
"firmware_revision": "0.0"
}
},
...
@ -90,18 +89,18 @@ string,
# dmidecode | jc --dmidecode -p -r
[
{
- `"handle"` - "0x0000",
- `"type"` - "0",
- `"bytes"` - "24",
- `"description"` - "BIOS Information",
- `"values"` - {
- `"vendor"` - "Phoenix Technologies LTD",
- `"version"` - "6.00",
- `"release_date"` - "04/13/2018",
- `"address"` - "0xEA490",
- `"runtime_size"` - "88944 bytes",
- `"rom_size"` - "64 kB",
- `"characteristics"` - [
"handle": "0x0000",
"type": "0",
"bytes": "24",
"description": "BIOS Information",
"values": {
"vendor": "Phoenix Technologies LTD",
"version": "6.00",
"release_date": "04/13/2018",
"address": "0xEA490",
"runtime_size": "88944 bytes",
"rom_size": "64 kB",
"characteristics": [
"ISA is supported",
"PCI is supported",
"PC Card (PCMCIA) is supported",
@ -124,8 +123,8 @@ string,
"Function key-initiated network boot is supported",
"Targeted content distribution is supported"
],
- `"bios_revision"` - "4.6",
- `"firmware_revision"` - "0.0"
"bios_revision": "4.6",
"firmware_revision": "0.0"
}
},
...
@ -151,16 +150,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -8,91 +8,90 @@ jc - JSON CLI output utility `dpkg -l` command output parser
Set the `COLUMNS` environment variable to a large value to avoid field
truncation. For example:
$ COLUMNS=500 dpkg -l | jc --dpkg-l
$ COLUMNS=500 dpkg -l | jc --dpkg-l
Usage (cli):
$ dpkg -l | jc --dpkg-l
$ dpkg -l | jc --dpkg-l
or
or
$ jc dpkg -l
$ jc dpkg -l
Usage (module):
import jc
result = jc.parse('dpkg_l', dpkg_command_output)
import jc
result = jc.parse('dpkg_l', dpkg_command_output)
or
or
import jc.parsers.dpkg_l
result = jc.parsers.dpkg_l.parse(dpkg_command_output)
import jc.parsers.dpkg_l
result = jc.parsers.dpkg_l.parse(dpkg_command_output)
Schema:
[
{
"codes": string,
"name": string,
"version": string,
"architecture": string,
"description": string,
"desired": string,
"status": string,
"error": string
}
]
**Examples**:
[
{
"codes": string,
"name": string,
"version": string,
"architecture": string,
"description": string,
"desired": string,
"status": string,
"error": string
}
]
Examples:
$ dpkg -l | jc --dpkg-l -p
[
{
- `"codes"` - "ii",
- `"name"` - "accountsservice",
- `"version"` - "0.6.45-1ubuntu1.3",
- `"architecture"` - "amd64",
- `"description"` - "query and manipulate user account information",
- `"desired"` - "install",
- `"status"` - "installed"
"codes": "ii",
"name": "accountsservice",
"version": "0.6.45-1ubuntu1.3",
"architecture": "amd64",
"description": "query and manipulate user account information",
"desired": "install",
"status": "installed"
},
{
- `"codes"` - "rc",
- `"name"` - "acl",
- `"version"` - "2.2.52-3build1",
- `"architecture"` - "amd64",
- `"description"` - "Access control list utilities",
- `"desired"` - "remove",
- `"status"` - "config-files"
"codes": "rc",
"name": "acl",
"version": "2.2.52-3build1",
"architecture": "amd64",
"description": "Access control list utilities",
"desired": "remove",
"status": "config-files"
},
{
- `"codes"` - "uWR",
- `"name"` - "acpi",
- `"version"` - "1.7-1.1",
- `"architecture"` - "amd64",
- `"description"` - "displays information on ACPI devices",
- `"desired"` - "unknown",
- `"status"` - "trigger await",
- `"error"` - "reinstall required"
"codes": "uWR",
"name": "acpi",
"version": "1.7-1.1",
"architecture": "amd64",
"description": "displays information on ACPI devices",
"desired": "unknown",
"status": "trigger await",
"error": "reinstall required"
},
{
- `"codes"` - "rh",
- `"name"` - "acpid",
- `"version"` - "1:2.0.28-1ubuntu1",
- `"architecture"` - "amd64",
- `"description"` - "Advanced Configuration and Power Interface...",
- `"desired"` - "remove",
- `"status"` - "half installed"
"codes": "rh",
"name": "acpid",
"version": "1:2.0.28-1ubuntu1",
"architecture": "amd64",
"description": "Advanced Configuration and Power Interface...",
"desired": "remove",
"status": "half installed"
},
{
- `"codes"` - "pn",
- `"name"` - "adduser",
- `"version"` - "3.116ubuntu1",
- `"architecture"` - "all",
- `"description"` - "add and remove users and groups",
- `"desired"` - "purge",
- `"status"` - "not installed"
"codes": "pn",
"name": "adduser",
"version": "3.116ubuntu1",
"architecture": "all",
"description": "add and remove users and groups",
"desired": "purge",
"status": "not installed"
},
...
]
@ -100,39 +99,39 @@ Schema:
$ dpkg -l | jc --dpkg-l -p -r
[
{
- `"codes"` - "ii",
- `"name"` - "accountsservice",
- `"version"` - "0.6.45-1ubuntu1.3",
- `"architecture"` - "amd64",
- `"description"` - "query and manipulate user account information"
"codes": "ii",
"name": "accountsservice",
"version": "0.6.45-1ubuntu1.3",
"architecture": "amd64",
"description": "query and manipulate user account information"
},
{
- `"codes"` - "rc",
- `"name"` - "acl",
- `"version"` - "2.2.52-3build1",
- `"architecture"` - "amd64",
- `"description"` - "Access control list utilities"
"codes": "rc",
"name": "acl",
"version": "2.2.52-3build1",
"architecture": "amd64",
"description": "Access control list utilities"
},
{
- `"codes"` - "uWR",
- `"name"` - "acpi",
- `"version"` - "1.7-1.1",
- `"architecture"` - "amd64",
- `"description"` - "displays information on ACPI devices"
"codes": "uWR",
"name": "acpi",
"version": "1.7-1.1",
"architecture": "amd64",
"description": "displays information on ACPI devices"
},
{
- `"codes"` - "rh",
- `"name"` - "acpid",
- `"version"` - "1:2.0.28-1ubuntu1",
- `"architecture"` - "amd64",
- `"description"` - "Advanced Configuration and Power Interface..."
"codes": "rh",
"name": "acpid",
"version": "1:2.0.28-1ubuntu1",
"architecture": "amd64",
"description": "Advanced Configuration and Power Interface..."
},
{
- `"codes"` - "pn",
- `"name"` - "adduser",
- `"version"` - "3.116ubuntu1",
- `"architecture"` - "all",
- `"description"` - "add and remove users and groups"
"codes": "pn",
"name": "adduser",
"version": "3.116ubuntu1",
"architecture": "all",
"description": "add and remove users and groups"
},
...
]
@ -157,16 +156,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,59 +7,58 @@ jc - JSON CLI output utility `du` command output parser
Usage (cli):
$ du | jc --du
$ du | jc --du
or
or
$ jc du
$ jc du
Usage (module):
import jc
result = jc.parse('du', du_command_output)
import jc
result = jc.parse('du', du_command_output)
or
or
import jc.parsers.du
result = jc.parsers.du.parse(du_command_output)
import jc.parsers.du
result = jc.parsers.du.parse(du_command_output)
Schema:
[
{
"size": integer,
"name": string
}
]
**Examples**:
[
{
"size": integer,
"name": string
}
]
Examples:
$ du /usr | jc --du -p
[
{
- `"size"` - 104608,
- `"name"` - "/usr/bin"
"size": 104608,
"name": "/usr/bin"
},
{
- `"size"` - 56,
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": 56,
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - 0,
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": 0,
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - 0,
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": 0,
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - 0,
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": 0,
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - 1008,
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": 1008,
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
...
]
@ -67,28 +66,28 @@ Schema:
$ du /usr | jc --du -p -r
[
{
- `"size"` - "104608",
- `"name"` - "/usr/bin"
"size": "104608",
"name": "/usr/bin"
},
{
- `"size"` - "56",
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": "56",
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - "0",
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": "0",
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - "0",
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": "0",
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - "0",
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": "0",
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
{
- `"size"` - "1008",
- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
"size": "1008",
"name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..."
},
...
]
@ -113,16 +112,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -12,70 +12,69 @@ function.
Usage (cli):
$ env | jc --env
$ env | jc --env
or
or
$ jc env
$ jc env
Usage (module):
import jc
result = jc.parse('env', env_command_output)
import jc
result = jc.parse('env', env_command_output)
or
or
import jc.parsers.env
result = jc.parsers.env.parse(env_command_output)
import jc.parsers.env
result = jc.parsers.env.parse(env_command_output)
Schema:
[
{
"name": string,
"value": string
}
]
**Examples**:
[
{
"name": string,
"value": string
}
]
Examples:
$ env | jc --env -p
[
{
- `"name"` - "XDG_SESSION_ID",
- `"value"` - "1"
"name": "XDG_SESSION_ID",
"value": "1"
},
{
- `"name"` - "HOSTNAME",
- `"value"` - "localhost.localdomain"
"name": "HOSTNAME",
"value": "localhost.localdomain"
},
{
- `"name"` - "TERM",
- `"value"` - "vt220"
"name": "TERM",
"value": "vt220"
},
{
- `"name"` - "SHELL",
- `"value"` - "/bin/bash"
"name": "SHELL",
"value": "/bin/bash"
},
{
- `"name"` - "HISTSIZE",
- `"value"` - "1000"
"name": "HISTSIZE",
"value": "1000"
},
...
]
$ env | jc --env -p -r
{
- `"TERM"` - "xterm-256color",
- `"SHELL"` - "/bin/bash",
- `"USER"` - "root",
- `"PATH"` - "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",
- `"PWD"` - "/root",
- `"LANG"` - "en_US.UTF-8",
- `"HOME"` - "/root",
- `"LOGNAME"` - "root",
- `"_"` - "/usr/bin/env"
"TERM": "xterm-256color",
"SHELL": "/bin/bash",
"USER": "root",
"PATH": "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",
"PWD": "/root",
"LANG": "en_US.UTF-8",
"HOME": "/root",
"LOGNAME": "root",
"_": "/usr/bin/env"
}
<a id="jc.parsers.env.info"></a>
@ -98,16 +97,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary of raw structured data or
List of Dictionaries of processed structured data

View File

@ -7,63 +7,62 @@ jc - JSON CLI output utility `file` command output parser
Usage (cli):
$ file * | jc --file
$ file * | jc --file
or
or
$ jc file *
$ jc file *
Usage (module):
import jc
result = jc.parse('file', file_command_output)
import jc
result = jc.parse('file', file_command_output)
or
or
import jc.parsers.file
result = jc.parsers.file.parse(file_command_output)
import jc.parsers.file
result = jc.parsers.file.parse(file_command_output)
Schema:
[
{
"filename": string,
"type": string
}
]
**Examples**:
[
{
"filename": string,
"type": string
}
]
Examples:
$ file * | jc --file -p
[
{
- `"filename"` - "Applications",
- `"type"` - "directory"
"filename": "Applications",
"type": "directory"
},
{
- `"filename"` - "another file with spaces",
- `"type"` - "empty"
"filename": "another file with spaces",
"type": "empty"
},
{
- `"filename"` - "argstest.py",
- `"type"` - "Python script text executable, ASCII text"
"filename": "argstest.py",
"type": "Python script text executable, ASCII text"
},
{
- `"filename"` - "blkid-p.out",
- `"type"` - "ASCII text"
"filename": "blkid-p.out",
"type": "ASCII text"
},
{
- `"filename"` - "blkid-pi.out",
- `"type"` - "ASCII text, with very long lines"
"filename": "blkid-pi.out",
"type": "ASCII text, with very long lines"
},
{
- `"filename"` - "cd_catalog.xml",
- `"type"` - "XML 1.0 document text, ASCII text, with CRLF line ..."
"filename": "cd_catalog.xml",
"type": "XML 1.0 document text, ASCII text, with CRLF line ..."
},
{
- `"filename"` - "centosserial.sh",
- `"type"` - "Bourne-Again shell script text executable, UTF-8 ..."
"filename": "centosserial.sh",
"type": "Bourne-Again shell script text executable, UTF-8 ..."
},
...
]
@ -88,16 +87,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -9,69 +9,68 @@ Supports `-s` output option. Does not support the `-l` detail option.
Usage (cli):
$ finger | jc --finger
$ finger | jc --finger
or
or
$ jc finger
$ jc finger
Usage (module):
import jc
result = jc.parse('finger', finger_command_output)
import jc
result = jc.parse('finger', finger_command_output)
or
or
import jc.parsers.finger
result = jc.parsers.finger.parse(finger_command_output)
import jc.parsers.finger
result = jc.parsers.finger.parse(finger_command_output)
Schema:
[
{
"login": string,
"name": string,
"tty": string,
"idle": string, # null if empty
"login_time": string,
"details": string,
"tty_writeable": boolean,
"idle_minutes": integer,
"idle_hours": integer,
"idle_days": integer,
"total_idle_minutes": integer
}
]
**Examples**:
[
{
"login": string,
"name": string,
"tty": string,
"idle": string, # null if empty
"login_time": string,
"details": string,
"tty_writeable": boolean,
"idle_minutes": integer,
"idle_hours": integer,
"idle_days": integer,
"total_idle_minutes": integer
}
]
Examples:
$ finger | jc --finger -p
[
{
- `"login"` - "jdoe",
- `"name"` - "John Doe",
- `"tty"` - "tty1",
- `"idle"` - "14d",
- `"login_time"` - "Mar 22 21:14",
- `"tty_writeable"` - false,
- `"idle_minutes"` - 0,
- `"idle_hours"` - 0,
- `"idle_days"` - 14,
- `"total_idle_minutes"` - 20160
"login": "jdoe",
"name": "John Doe",
"tty": "tty1",
"idle": "14d",
"login_time": "Mar 22 21:14",
"tty_writeable": false,
"idle_minutes": 0,
"idle_hours": 0,
"idle_days": 14,
"total_idle_minutes": 20160
},
{
- `"login"` - "jdoe",
- `"name"` - "John Doe",
- `"tty"` - "pts/0",
- `"idle"` - null,
- `"login_time"` - "Apr 5 15:33",
- `"details"` - "(192.168.1.22)",
- `"tty_writeable"` - true,
- `"idle_minutes"` - 0,
- `"idle_hours"` - 0,
- `"idle_days"` - 0,
- `"total_idle_minutes"` - 0
"login": "jdoe",
"name": "John Doe",
"tty": "pts/0",
"idle": null,
"login_time": "Apr 5 15:33",
"details": "(192.168.1.22)",
"tty_writeable": true,
"idle_minutes": 0,
"idle_hours": 0,
"idle_days": 0,
"total_idle_minutes": 0
},
...
]
@ -79,19 +78,19 @@ Schema:
$ finger | jc --finger -p -r
[
{
- `"login"` - "jdoe",
- `"name"` - "John Doe",
- `"tty"` - "*tty1",
- `"idle"` - "14d",
- `"login_time"` - "Mar 22 21:14"
"login": "jdoe",
"name": "John Doe",
"tty": "*tty1",
"idle": "14d",
"login_time": "Mar 22 21:14"
},
{
- `"login"` - "jdoe",
- `"name"` - "John Doe",
- `"tty"` - "pts/0",
- `"idle"` - null,
- `"login_time"` - "Apr 5 15:33",
- `"details"` - "(192.168.1.22)"
"login": "jdoe",
"name": "John Doe",
"tty": "pts/0",
"idle": null,
"login_time": "Apr 5 15:33",
"details": "(192.168.1.22)"
},
...
]
@ -116,16 +115,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,74 +7,73 @@ jc - JSON CLI output utility `free` command output parser
Usage (cli):
$ free | jc --free
$ free | jc --free
or
or
$ jc free
$ jc free
Usage (module):
import jc
result = jc.parse('free', free_command_output)
import jc
result = jc.parse('free', free_command_output)
or
or
import jc.parsers.free
result = jc.parsers.free.parse(free_command_output)
import jc.parsers.free
result = jc.parsers.free.parse(free_command_output)
Schema:
[
{
"type": string,
"total": integer,
"used": integer,
"free": integer,
"shared": integer,
"buff_cache": integer,
"available": integer
}
]
**Examples**:
[
{
"type": string,
"total": integer,
"used": integer,
"free": integer,
"shared": integer,
"buff_cache": integer,
"available": integer
}
]
Examples:
$ free | jc --free -p
[
{
- `"type"` - "Mem",
- `"total"` - 3861340,
- `"used"` - 220508,
- `"free"` - 3381972,
- `"shared"` - 11800,
- `"buff_cache"` - 258860,
- `"available"` - 3397784
"type": "Mem",
"total": 3861340,
"used": 220508,
"free": 3381972,
"shared": 11800,
"buff_cache": 258860,
"available": 3397784
},
{
- `"type"` - "Swap",
- `"total"` - 2097148,
- `"used"` - 0,
- `"free"` - 2097148
"type": "Swap",
"total": 2097148,
"used": 0,
"free": 2097148
}
]
$ free | jc --free -p -r
[
{
- `"type"` - "Mem",
- `"total"` - "2017300",
- `"used"` - "213104",
- `"free"` - "1148452",
- `"shared"` - "1176",
- `"buff_cache"` - "655744",
- `"available"` - "1622204"
"type": "Mem",
"total": "2017300",
"used": "213104",
"free": "1148452",
"shared": "1176",
"buff_cache": "655744",
"available": "1622204"
},
{
- `"type"` - "Swap",
- `"total"` - "2097148",
- `"used"` - "0",
- `"free"` - "2097148"
"type": "Swap",
"total": "2097148",
"used": "0",
"free": "2097148"
}
]
@ -98,16 +97,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,87 +7,86 @@ jc - JSON CLI output utility `fstab` file parser
Usage (cli):
$ cat /etc/fstab | jc --fstab
$ cat /etc/fstab | jc --fstab
Usage (module):
import jc
result = jc.parse('fstab', fstab_command_output)
import jc
result = jc.parse('fstab', fstab_command_output)
or
or
import jc.parsers.fstab
result = jc.parsers.fstab.parse(fstab_command_output)
import jc.parsers.fstab
result = jc.parsers.fstab.parse(fstab_command_output)
Schema:
[
{
"fs_spec": string,
"fs_file": string,
"fs_vfstype": string,
"fs_mntops": string,
"fs_freq": integer,
"fs_passno": integer
}
]
**Examples**:
[
{
"fs_spec": string,
"fs_file": string,
"fs_vfstype": string,
"fs_mntops": string,
"fs_freq": integer,
"fs_passno": integer
}
]
Examples:
$ cat /etc/fstab | jc --fstab -p
[
{
- `"fs_spec"` - "/dev/mapper/centos-root",
- `"fs_file"` - "/",
- `"fs_vfstype"` - "xfs",
- `"fs_mntops"` - "defaults",
- `"fs_freq"` - 0,
- `"fs_passno"` - 0
"fs_spec": "/dev/mapper/centos-root",
"fs_file": "/",
"fs_vfstype": "xfs",
"fs_mntops": "defaults",
"fs_freq": 0,
"fs_passno": 0
},
{
- `"fs_spec"` - "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932",
- `"fs_file"` - "/boot",
- `"fs_vfstype"` - "xfs",
- `"fs_mntops"` - "defaults",
- `"fs_freq"` - 0,
- `"fs_passno"` - 0
"fs_spec": "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932",
"fs_file": "/boot",
"fs_vfstype": "xfs",
"fs_mntops": "defaults",
"fs_freq": 0,
"fs_passno": 0
},
{
- `"fs_spec"` - "/dev/mapper/centos-swap",
- `"fs_file"` - "swap",
- `"fs_vfstype"` - "swap",
- `"fs_mntops"` - "defaults",
- `"fs_freq"` - 0,
- `"fs_passno"` - 0
"fs_spec": "/dev/mapper/centos-swap",
"fs_file": "swap",
"fs_vfstype": "swap",
"fs_mntops": "defaults",
"fs_freq": 0,
"fs_passno": 0
}
]
$ cat /etc/fstab | jc --fstab -p -r
[
{
- `"fs_spec"` - "/dev/mapper/centos-root",
- `"fs_file"` - "/",
- `"fs_vfstype"` - "xfs",
- `"fs_mntops"` - "defaults",
- `"fs_freq"` - "0",
- `"fs_passno"` - "0"
"fs_spec": "/dev/mapper/centos-root",
"fs_file": "/",
"fs_vfstype": "xfs",
"fs_mntops": "defaults",
"fs_freq": "0",
"fs_passno": "0"
},
{
- `"fs_spec"` - "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932",
- `"fs_file"` - "/boot",
- `"fs_vfstype"` - "xfs",
- `"fs_mntops"` - "defaults",
- `"fs_freq"` - "0",
- `"fs_passno"` - "0"
"fs_spec": "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932",
"fs_file": "/boot",
"fs_vfstype": "xfs",
"fs_mntops": "defaults",
"fs_freq": "0",
"fs_passno": "0"
},
{
- `"fs_spec"` - "/dev/mapper/centos-swap",
- `"fs_file"` - "swap",
- `"fs_vfstype"` - "swap",
- `"fs_mntops"` - "defaults",
- `"fs_freq"` - "0",
- `"fs_passno"` - "0"
"fs_spec": "/dev/mapper/centos-swap",
"fs_file": "swap",
"fs_vfstype": "swap",
"fs_mntops": "defaults",
"fs_freq": "0",
"fs_passno": "0"
}
]
@ -111,16 +110,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,61 +7,60 @@ jc - JSON CLI output utility `/etc/group` file parser
Usage (cli):
$ cat /etc/group | jc --group
$ cat /etc/group | jc --group
Usage (module):
import jc
result = jc.parse('group', group_file_output)
import jc
result = jc.parse('group', group_file_output)
or
or
import jc.parsers.group
result = jc.parsers.group.parse(group_file_output)
import jc.parsers.group
result = jc.parsers.group.parse(group_file_output)
Schema:
[
{
"group_name": string,
"password": string,
"gid": integer,
"members": [
string
]
}
]
**Examples**:
[
{
"group_name": string,
"password": string,
"gid": integer,
"members": [
string
]
}
]
Examples:
$ cat /etc/group | jc --group -p
[
{
- `"group_name"` - "nobody",
- `"password"` - "*",
- `"gid"` - -2,
- `"members"` - []
"group_name": "nobody",
"password": "*",
"gid": -2,
"members": []
},
{
- `"group_name"` - "nogroup",
- `"password"` - "*",
- `"gid"` - -1,
- `"members"` - []
"group_name": "nogroup",
"password": "*",
"gid": -1,
"members": []
},
{
- `"group_name"` - "wheel",
- `"password"` - "*",
- `"gid"` - 0,
- `"members"` - [
"group_name": "wheel",
"password": "*",
"gid": 0,
"members": [
"root"
]
},
{
- `"group_name"` - "certusers",
- `"password"` - "*",
- `"gid"` - 29,
- `"members"` - [
"group_name": "certusers",
"password": "*",
"gid": 29,
"members": [
"root",
"_jabber",
"_postfix",
@ -76,34 +75,34 @@ string
$ cat /etc/group | jc --group -p -r
[
{
- `"group_name"` - "nobody",
- `"password"` - "*",
- `"gid"` - "-2",
- `"members"` - [
"group_name": "nobody",
"password": "*",
"gid": "-2",
"members": [
""
]
},
{
- `"group_name"` - "nogroup",
- `"password"` - "*",
- `"gid"` - "-1",
- `"members"` - [
"group_name": "nogroup",
"password": "*",
"gid": "-1",
"members": [
""
]
},
{
- `"group_name"` - "wheel",
- `"password"` - "*",
- `"gid"` - "0",
- `"members"` - [
"group_name": "wheel",
"password": "*",
"gid": "0",
"members": [
"root"
]
},
{
- `"group_name"` - "certusers",
- `"password"` - "*",
- `"gid"` - "29",
- `"members"` - [
"group_name": "certusers",
"password": "*",
"gid": "29",
"members": [
"root",
"_jabber",
"_postfix",
@ -135,16 +134,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,49 +7,48 @@ jc - JSON CLI output utility `/etc/gshadow` file parser
Usage (cli):
$ cat /etc/gshadow | jc --gshadow
$ cat /etc/gshadow | jc --gshadow
Usage (module):
import jc
result = jc.parse('gshadow', gshadow_file_output)
import jc
result = jc.parse('gshadow', gshadow_file_output)
or
or
import jc.parsers.gshadow
result = jc.parsers.gshadow.parse(gshadow_file_output)
import jc.parsers.gshadow
result = jc.parsers.gshadow.parse(gshadow_file_output)
Schema:
[
{
"group_name": string,
"password": string,
"administrators": [
string
],
"members": [
string
]
}
]
**Examples**:
[
{
"group_name": string,
"password": string,
"administrators": [
string
],
"members": [
string
]
}
]
Examples:
$ cat /etc/gshadow | jc --gshadow -p
[
{
- `"group_name"` - "root",
- `"password"` - "*",
- `"administrators"` - [],
- `"members"` - []
"group_name": "root",
"password": "*",
"administrators": [],
"members": []
},
{
- `"group_name"` - "adm",
- `"password"` - "*",
- `"administrators"` - [],
- `"members"` - [
"group_name": "adm",
"password": "*",
"administrators": [],
"members": [
"syslog",
"joeuser"
]
@ -60,22 +59,22 @@ string
$ cat /etc/gshadow | jc --gshadow -p -r
[
{
- `"group_name"` - "root",
- `"password"` - "*",
- `"administrators"` - [
"group_name": "root",
"password": "*",
"administrators": [
""
],
- `"members"` - [
"members": [
""
]
},
{
- `"group_name"` - "adm",
- `"password"` - "*",
- `"administrators"` - [
"group_name": "adm",
"password": "*",
"administrators": [
""
],
- `"members"` - [
"members": [
"syslog",
"joeuser"
]
@ -103,16 +102,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,39 +7,38 @@ jc - JSON CLI output utility `hash` command output parser
Usage (cli):
$ hash | jc --hash
$ hash | jc --hash
Usage (module):
import jc
result = jc.parse('hash', hash_command_output)
import jc
result = jc.parse('hash', hash_command_output)
or
or
import jc.parsers.hash
result = jc.parsers.hash.parse(hash_command_output)
import jc.parsers.hash
result = jc.parsers.hash.parse(hash_command_output)
Schema:
[
{
"command": string,
"hits": integer
}
]
**Examples**:
[
{
"command": string,
"hits": integer
}
]
Examples:
$ hash | jc --hash -p
[
{
- `"hits"` - 2,
- `"command"` - "/bin/cat"
"hits": 2,
"command": "/bin/cat"
},
{
- `"hits"` - 1,
- `"command"` - "/bin/ls"
"hits": 1,
"command": "/bin/ls"
}
]
@ -63,16 +62,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -17,59 +17,58 @@ This parser works with the following hash calculation utilities:
Usage (cli):
$ md5sum file.txt | jc --hashsum
$ md5sum file.txt | jc --hashsum
or
or
$ jc md5sum file.txt
$ jc md5sum file.txt
Usage (module):
import jc
result = jc.parse('hashsum', md5sum_command_output)
import jc
result = jc.parse('hashsum', md5sum_command_output)
or
or
import jc.parsers.hashsum
result = jc.parsers.hashsum.parse(md5sum_command_output)
import jc.parsers.hashsum
result = jc.parsers.hashsum.parse(md5sum_command_output)
Schema:
[
{
"filename": string,
"hash": string,
}
]
**Examples**:
[
{
"filename": string,
"hash": string,
}
]
Examples:
$ md5sum * | jc --hashsum -p
[
{
- `"filename"` - "devtoolset-3-gcc-4.9.2-6.el7.x86_64.rpm",
- `"hash"` - "65fc958c1add637ec23c4b137aecf3d3"
"filename": "devtoolset-3-gcc-4.9.2-6.el7.x86_64.rpm",
"hash": "65fc958c1add637ec23c4b137aecf3d3"
},
{
- `"filename"` - "digout",
- `"hash"` - "5b9312ee5aff080927753c63a347707d"
"filename": "digout",
"hash": "5b9312ee5aff080927753c63a347707d"
},
{
- `"filename"` - "dmidecode.out",
- `"hash"` - "716fd11c2ac00db109281f7110b8fb9d"
"filename": "dmidecode.out",
"hash": "716fd11c2ac00db109281f7110b8fb9d"
},
{
- `"filename"` - "file with spaces in the name",
- `"hash"` - "d41d8cd98f00b204e9800998ecf8427e"
"filename": "file with spaces in the name",
"hash": "d41d8cd98f00b204e9800998ecf8427e"
},
{
- `"filename"` - "id-centos.out",
- `"hash"` - "4295be239a14ad77ef3253103de976d2"
"filename": "id-centos.out",
"hash": "4295be239a14ad77ef3253103de976d2"
},
{
- `"filename"` - "ifcfg.json",
- `"hash"` - "01fda0d9ba9a75618b072e64ff512b43"
"filename": "ifcfg.json",
"hash": "01fda0d9ba9a75618b072e64ff512b43"
},
...
]
@ -94,16 +93,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,102 +7,101 @@ jc - JSON CLI output utility `hciconfig` command output parser
Usage (cli):
$ hciconfig | jc --hciconfig
$ hciconfig | jc --hciconfig
or
or
$ jc hciconfig
$ jc hciconfig
Usage (module):
import jc
result = jc.parse('hciconfig', hciconfig_command_output)
import jc
result = jc.parse('hciconfig', hciconfig_command_output)
or
or
import jc.parsers.hciconfig
result = jc.parsers.hciconfig.parse(hciconfig_command_output)
import jc.parsers.hciconfig
result = jc.parsers.hciconfig.parse(hciconfig_command_output)
Schema:
[
{
"device": string,
"type": string,
"bus": string,
"bd_address": string,
"acl_mtu": integer,
"acl_mtu_packets": integer,
"sco_mtu": integer,
"sco_mtu_packets": integer,
"state": [
string
],
"rx_bytes": integer,
"rx_acl": integer,
"rx_sco": integer,
"rx_events": integer,
"rx_errors": integer,
"tx_bytes": integer,
"tx_acl": integer,
"tx_sco": integer,
"tx_commands": integer,
"tx_errors": integer,
"features": [
string
],
"packet_type": [
string
],
"link_policy": [
string
],
"link_mode": [
string
],
"name": string,
"class": string,
"service_classes": [
string # 'Unspecified' is null
],
"device_class": string,
"hci_version": string,
"hci_revision": string,
"lmp_version": string,
"lmp_subversion": string,
"manufacturer": string
}
]
**Examples**:
[
{
"device": string,
"type": string,
"bus": string,
"bd_address": string,
"acl_mtu": integer,
"acl_mtu_packets": integer,
"sco_mtu": integer,
"sco_mtu_packets": integer,
"state": [
string
],
"rx_bytes": integer,
"rx_acl": integer,
"rx_sco": integer,
"rx_events": integer,
"rx_errors": integer,
"tx_bytes": integer,
"tx_acl": integer,
"tx_sco": integer,
"tx_commands": integer,
"tx_errors": integer,
"features": [
string
],
"packet_type": [
string
],
"link_policy": [
string
],
"link_mode": [
string
],
"name": string,
"class": string,
"service_classes": [
string # 'Unspecified' is null
],
"device_class": string,
"hci_version": string,
"hci_revision": string,
"lmp_version": string,
"lmp_subversion": string,
"manufacturer": string
}
]
Examples:
$ hciconfig -a | jc --hciconfig -p
[
{
- `"device"` - "hci0",
- `"type"` - "Primary",
- `"bus"` - "USB",
- `"bd_address"` - "00:1A:7D:DA:71:13",
- `"acl_mtu"` - 310,
- `"acl_mtu_packets"` - 10,
- `"sco_mtu"` - 64,
- `"sco_mtu_packets"` - 8,
- `"state"` - [
"device": "hci0",
"type": "Primary",
"bus": "USB",
"bd_address": "00:1A:7D:DA:71:13",
"acl_mtu": 310,
"acl_mtu_packets": 10,
"sco_mtu": 64,
"sco_mtu_packets": 8,
"state": [
"UP",
"RUNNING"
],
- `"rx_bytes"` - 13905869,
- `"rx_acl"` - 0,
- `"rx_sco"` - 0,
- `"rx_events"` - 393300,
- `"rx_errors"` - 0,
- `"tx_bytes"` - 62629,
- `"tx_acl"` - 0,
- `"tx_sco"` - 0,
- `"tx_commands"` - 3893,
- `"tx_errors"` - 0,
- `"features"` - [
"rx_bytes": 13905869,
"rx_acl": 0,
"rx_sco": 0,
"rx_events": 393300,
"rx_errors": 0,
"tx_bytes": 62629,
"tx_acl": 0,
"tx_sco": 0,
"tx_commands": 3893,
"tx_errors": 0,
"features": [
"0xff",
"0xff",
"0x8f",
@ -112,7 +111,7 @@ string # 'Unspecified' is null
"0x5b",
"0x87"
],
- `"packet_type"` - [
"packet_type": [
"DM1",
"DM3",
"DM5",
@ -123,49 +122,49 @@ string # 'Unspecified' is null
"HV2",
"HV3"
],
- `"link_policy"` - [
"link_policy": [
"RSWITCH",
"HOLD",
"SNIFF",
"PARK"
],
- `"link_mode"` - [
"link_mode": [
"SLAVE",
"ACCEPT"
],
- `"name"` - "CSR8510 A10",
- `"class"` - "0x000000",
- `"service_classes"` - null,
- `"device_class"` - "Miscellaneous",
- `"hci_version"` - "4.0 (0x6)",
- `"hci_revision"` - "0x22bb",
- `"lmp_version"` - "4.0 (0x6)",
- `"lmp_subversion"` - "0x22bb",
- `"manufacturer"` - "Cambridge Silicon Radio (10)"
"name": "CSR8510 A10",
"class": "0x000000",
"service_classes": null,
"device_class": "Miscellaneous",
"hci_version": "4.0 (0x6)",
"hci_revision": "0x22bb",
"lmp_version": "4.0 (0x6)",
"lmp_subversion": "0x22bb",
"manufacturer": "Cambridge Silicon Radio (10)"
},
{
- `"device"` - "hci1",
- `"type"` - "Primary",
- `"bus"` - "USB",
- `"bd_address"` - "00:1A:7D:DA:71:13",
- `"acl_mtu"` - 310,
- `"acl_mtu_packets"` - 10,
- `"sco_mtu"` - 64,
- `"sco_mtu_packets"` - 8,
- `"state"` - [
"device": "hci1",
"type": "Primary",
"bus": "USB",
"bd_address": "00:1A:7D:DA:71:13",
"acl_mtu": 310,
"acl_mtu_packets": 10,
"sco_mtu": 64,
"sco_mtu_packets": 8,
"state": [
"DOWN"
],
- `"rx_bytes"` - 4388363,
- `"rx_acl"` - 0,
- `"rx_sco"` - 0,
- `"rx_events"` - 122021,
- `"rx_errors"` - 0,
- `"tx_bytes"` - 52350,
- `"tx_acl"` - 0,
- `"tx_sco"` - 0,
- `"tx_commands"` - 3480,
- `"tx_errors"` - 2,
- `"features"` - [
"rx_bytes": 4388363,
"rx_acl": 0,
"rx_sco": 0,
"rx_events": 122021,
"rx_errors": 0,
"tx_bytes": 52350,
"tx_acl": 0,
"tx_sco": 0,
"tx_commands": 3480,
"tx_errors": 2,
"features": [
"0xff",
"0xff",
"0x8f",
@ -175,7 +174,7 @@ string # 'Unspecified' is null
"0x5b",
"0x87"
],
- `"packet_type"` - [
"packet_type": [
"DM1",
"DM3",
"DM5",
@ -186,13 +185,13 @@ string # 'Unspecified' is null
"HV2",
"HV3"
],
- `"link_policy"` - [
"link_policy": [
"RSWITCH",
"HOLD",
"SNIFF",
"PARK"
],
- `"link_mode"` - [
"link_mode": [
"SLAVE",
"ACCEPT"
]
@ -202,29 +201,29 @@ string # 'Unspecified' is null
$ hciconfig -a | jc --hciconfig -p -r
[
{
- `"device"` - "hci0",
- `"type"` - "Primary",
- `"bus"` - "USB",
- `"bd_address"` - "00:1A:7D:DA:71:13",
- `"acl_mtu"` - "310",
- `"acl_mtu_packets"` - "10",
- `"sco_mtu"` - "64",
- `"sco_mtu_packets"` - "8",
- `"state"` - [
"device": "hci0",
"type": "Primary",
"bus": "USB",
"bd_address": "00:1A:7D:DA:71:13",
"acl_mtu": "310",
"acl_mtu_packets": "10",
"sco_mtu": "64",
"sco_mtu_packets": "8",
"state": [
"UP",
"RUNNING"
],
- `"rx_bytes"` - "13905869",
- `"rx_acl"` - "0",
- `"rx_sco"` - "0",
- `"rx_events"` - "393300",
- `"rx_errors"` - "0",
- `"tx_bytes"` - "62629",
- `"tx_acl"` - "0",
- `"tx_sco"` - "0",
- `"tx_commands"` - "3893",
- `"tx_errors"` - "0",
- `"features"` - [
"rx_bytes": "13905869",
"rx_acl": "0",
"rx_sco": "0",
"rx_events": "393300",
"rx_errors": "0",
"tx_bytes": "62629",
"tx_acl": "0",
"tx_sco": "0",
"tx_commands": "3893",
"tx_errors": "0",
"features": [
"0xff",
"0xff",
"0x8f",
@ -234,7 +233,7 @@ string # 'Unspecified' is null
"0x5b",
"0x87"
],
- `"packet_type"` - [
"packet_type": [
"DM1",
"DM3",
"DM5",
@ -245,51 +244,51 @@ string # 'Unspecified' is null
"HV2",
"HV3"
],
- `"link_policy"` - [
"link_policy": [
"RSWITCH",
"HOLD",
"SNIFF",
"PARK"
],
- `"link_mode"` - [
"link_mode": [
"SLAVE",
"ACCEPT"
],
- `"name"` - "CSR8510 A10",
- `"class"` - "0x000000",
- `"service_classes"` - [
"name": "CSR8510 A10",
"class": "0x000000",
"service_classes": [
"Unspecified"
],
- `"device_class"` - "Miscellaneous",
- `"hci_version"` - "4.0 (0x6)",
- `"hci_revision"` - "0x22bb",
- `"lmp_version"` - "4.0 (0x6)",
- `"lmp_subversion"` - "0x22bb",
- `"manufacturer"` - "Cambridge Silicon Radio (10)"
"device_class": "Miscellaneous",
"hci_version": "4.0 (0x6)",
"hci_revision": "0x22bb",
"lmp_version": "4.0 (0x6)",
"lmp_subversion": "0x22bb",
"manufacturer": "Cambridge Silicon Radio (10)"
},
{
- `"device"` - "hci1",
- `"type"` - "Primary",
- `"bus"` - "USB",
- `"bd_address"` - "00:1A:7D:DA:71:13",
- `"acl_mtu"` - "310",
- `"acl_mtu_packets"` - "10",
- `"sco_mtu"` - "64",
- `"sco_mtu_packets"` - "8",
- `"state"` - [
"device": "hci1",
"type": "Primary",
"bus": "USB",
"bd_address": "00:1A:7D:DA:71:13",
"acl_mtu": "310",
"acl_mtu_packets": "10",
"sco_mtu": "64",
"sco_mtu_packets": "8",
"state": [
"DOWN"
],
- `"rx_bytes"` - "4388363",
- `"rx_acl"` - "0",
- `"rx_sco"` - "0",
- `"rx_events"` - "122021",
- `"rx_errors"` - "0",
- `"tx_bytes"` - "52350",
- `"tx_acl"` - "0",
- `"tx_sco"` - "0",
- `"tx_commands"` - "3480",
- `"tx_errors"` - "2",
- `"features"` - [
"rx_bytes": "4388363",
"rx_acl": "0",
"rx_sco": "0",
"rx_events": "122021",
"rx_errors": "0",
"tx_bytes": "52350",
"tx_acl": "0",
"tx_sco": "0",
"tx_commands": "3480",
"tx_errors": "2",
"features": [
"0xff",
"0xff",
"0x8f",
@ -299,7 +298,7 @@ string # 'Unspecified' is null
"0x5b",
"0x87"
],
- `"packet_type"` - [
"packet_type": [
"DM1",
"DM3",
"DM5",
@ -310,13 +309,13 @@ string # 'Unspecified' is null
"HV2",
"HV3"
],
- `"link_policy"` - [
"link_policy": [
"RSWITCH",
"HOLD",
"SNIFF",
"PARK"
],
- `"link_mode"` - [
"link_mode": [
"SLAVE",
"ACCEPT"
]
@ -343,16 +342,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -15,57 +15,56 @@ builtin.
Usage (cli):
$ history | jc --history
$ history | jc --history
Usage (module):
import jc
result = jc.parse('history', history_command_output)
import jc
result = jc.parse('history', history_command_output)
or
or
import jc.parsers.history
result = jc.parsers.history.parse(history_command_output)
import jc.parsers.history
result = jc.parsers.history.parse(history_command_output)
Schema:
[
{
"line": integer,
"command": string
}
]
**Examples**:
[
{
"line": integer,
"command": string
}
]
Examples:
$ history | jc --history -p
[
{
- `"line"` - 118,
- `"command"` - "sleep 100"
"line": 118,
"command": "sleep 100"
},
{
- `"line"` - 119,
- `"command"` - "ls /bin"
"line": 119,
"command": "ls /bin"
},
{
- `"line"` - 120,
- `"command"` - "echo \"hello\""
"line": 120,
"command": "echo \"hello\""
},
{
- `"line"` - 121,
- `"command"` - "docker images"
"line": 121,
"command": "docker images"
},
...
]
$ history | jc --history -p -r
{
- `"118"` - "sleep 100",
- `"119"` - "ls /bin",
- `"120"` - "echo \"hello\"",
- `"121"` - "docker images",
"118": "sleep 100",
"119": "ls /bin",
"120": "echo \"hello\"",
"121": "docker images",
...
}
@ -89,16 +88,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary of raw structured data or
List of Dictionaries of processed structured data

View File

@ -7,74 +7,73 @@ jc - JSON CLI output utility `/etc/hosts` file parser
Usage (cli):
$ cat /etc/hosts | jc --hosts
$ cat /etc/hosts | jc --hosts
Usage (module):
import jc
result = jc.parse('hosts', hosts_file_output)
import jc
result = jc.parse('hosts', hosts_file_output)
or
or
import jc.parsers.hosts
result = jc.parsers.hosts.parse(hosts_file_output)
import jc.parsers.hosts
result = jc.parsers.hosts.parse(hosts_file_output)
Schema:
[
{
"ip": string,
"hostname": [
string
]
}
]
**Examples**:
[
{
"ip": string,
"hostname": [
string
]
}
]
Examples:
$ cat /etc/hosts | jc --hosts -p
[
{
- `"ip"` - "127.0.0.1",
- `"hostname"` - [
"ip": "127.0.0.1",
"hostname": [
"localhost"
]
},
{
- `"ip"` - "127.0.1.1",
- `"hostname"` - [
"ip": "127.0.1.1",
"hostname": [
"root-ubuntu"
]
},
{
- `"ip"` - "::1",
- `"hostname"` - [
"ip": "::1",
"hostname": [
"ip6-localhost",
"ip6-loopback"
]
},
{
- `"ip"` - "fe00::0",
- `"hostname"` - [
"ip": "fe00::0",
"hostname": [
"ip6-localnet"
]
},
{
- `"ip"` - "ff00::0",
- `"hostname"` - [
"ip": "ff00::0",
"hostname": [
"ip6-mcastprefix"
]
},
{
- `"ip"` - "ff02::1",
- `"hostname"` - [
"ip": "ff02::1",
"hostname": [
"ip6-allnodes"
]
},
{
- `"ip"` - "ff02::2",
- `"hostname"` - [
"ip": "ff02::2",
"hostname": [
"ip6-allrouters"
]
}
@ -100,16 +99,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,107 +7,106 @@ jc - JSON CLI output utility `id` command output parser
Usage (cli):
$ id | jc --id
$ id | jc --id
or
or
$ jc id
$ jc id
Usage (module):
import jc
result = jc.parse('id', id_command_output)
import jc
result = jc.parse('id', id_command_output)
or
or
import jc.parsers.id
result = jc.parsers.id.parse(id_command_output)
import jc.parsers.id
result = jc.parsers.id.parse(id_command_output)
Schema:
{
"uid": {
"id": integer,
"name": string
},
"gid": {
"id": integer,
"name": string
},
"groups": [
{
"id": integer,
"name": string
},
{
"id": integer,
"name": string
}
],
"context": {
"user": string,
"role": string,
"type": string,
"level": string
}
}
**Examples**:
{
"uid": {
"id": integer,
"name": string
},
"gid": {
"id": integer,
"name": string
},
"groups": [
{
"id": integer,
"name": string
},
{
"id": integer,
"name": string
}
],
"context": {
"user": string,
"role": string,
"type": string,
"level": string
}
}
Examples:
$ id | jc --id -p
{
- `"uid"` - {
- `"id"` - 1000,
- `"name"` - "joeuser"
"uid": {
"id": 1000,
"name": "joeuser"
},
- `"gid"` - {
- `"id"` - 1000,
- `"name"` - "joeuser"
"gid": {
"id": 1000,
"name": "joeuser"
},
- `"groups"` - [
"groups": [
{
- `"id"` - 1000,
- `"name"` - "joeuser"
"id": 1000,
"name": "joeuser"
},
{
- `"id"` - 10,
- `"name"` - "wheel"
"id": 10,
"name": "wheel"
}
],
- `"context"` - {
- `"user"` - "unconfined_u",
- `"role"` - "unconfined_r",
- `"type"` - "unconfined_t",
- `"level"` - "s0-s0:c0.c1023"
"context": {
"user": "unconfined_u",
"role": "unconfined_r",
"type": "unconfined_t",
"level": "s0-s0:c0.c1023"
}
}
$ id | jc --id -p -r
{
- `"uid"` - {
- `"id"` - "1000",
- `"name"` - "joeuser"
"uid": {
"id": "1000",
"name": "joeuser"
},
- `"gid"` - {
- `"id"` - "1000",
- `"name"` - "joeuser"
"gid": {
"id": "1000",
"name": "joeuser"
},
- `"groups"` - [
"groups": [
{
- `"id"` - "1000",
- `"name"` - "joeuser"
"id": "1000",
"name": "joeuser"
},
{
- `"id"` - "10",
- `"name"` - "wheel"
"id": "10",
"name": "wheel"
}
],
- `"context"` - {
- `"user"` - "unconfined_u",
- `"role"` - "unconfined_r",
- `"type"` - "unconfined_t",
- `"level"` - "s0-s0:c0.c1023"
"context": {
"user": "unconfined_u",
"role": "unconfined_r",
"type": "unconfined_t",
"level": "s0-s0:c0.c1023"
}
}
@ -131,16 +130,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -9,186 +9,185 @@ Note: No `ifconfig` options are supported.
Usage (cli):
$ ifconfig | jc --ifconfig
$ ifconfig | jc --ifconfig
or
or
$ jc ifconfig
$ jc ifconfig
Usage (module):
import jc
result = jc.parse('ifconfig', ifconfig_command_output)
import jc
result = jc.parse('ifconfig', ifconfig_command_output)
or
or
import jc.parsers.ifconfig
result = jc.parsers.ifconfig.parse(ifconfig_command_output)
import jc.parsers.ifconfig
result = jc.parsers.ifconfig.parse(ifconfig_command_output)
Schema:
[
{
"name": string,
"flags": integer,
"state": [
string
],
"mtu": integer,
"ipv4_addr": string,
"ipv4_mask": string,
"ipv4_bcast": string,
"ipv6_addr": string,
"ipv6_mask": integer,
"ipv6_scope": string,
"mac_addr": string,
"type": string,
"rx_packets": integer,
"rx_bytes": integer,
"rx_errors": integer,
"rx_dropped": integer,
"rx_overruns": integer,
"rx_frame": integer,
"tx_packets": integer,
"tx_bytes": integer,
"tx_errors": integer,
"tx_dropped": integer,
"tx_overruns": integer,
"tx_carrier": integer,
"tx_collisions": integer,
"metric": integer
}
]
**Examples**:
[
{
"name": string,
"flags": integer,
"state": [
string
],
"mtu": integer,
"ipv4_addr": string,
"ipv4_mask": string,
"ipv4_bcast": string,
"ipv6_addr": string,
"ipv6_mask": integer,
"ipv6_scope": string,
"mac_addr": string,
"type": string,
"rx_packets": integer,
"rx_bytes": integer,
"rx_errors": integer,
"rx_dropped": integer,
"rx_overruns": integer,
"rx_frame": integer,
"tx_packets": integer,
"tx_bytes": integer,
"tx_errors": integer,
"tx_dropped": integer,
"tx_overruns": integer,
"tx_carrier": integer,
"tx_collisions": integer,
"metric": integer
}
]
Examples:
$ ifconfig | jc --ifconfig -p
[
{
- `"name"` - "ens33",
- `"flags"` - 4163,
- `"state"` - [
"name": "ens33",
"flags": 4163,
"state": [
"UP",
"BROADCAST",
"RUNNING",
"MULTICAST"
],
- `"mtu"` - 1500,
- `"ipv4_addr"` - "192.168.71.137",
- `"ipv4_mask"` - "255.255.255.0",
- `"ipv4_bcast"` - "192.168.71.255",
- `"ipv6_addr"` - "fe80::c1cb:715d:bc3e:b8a0",
- `"ipv6_mask"` - 64,
- `"ipv6_scope"` - "0x20",
- `"mac_addr"` - "00:0c:29:3b:58:0e",
- `"type"` - "Ethernet",
- `"rx_packets"` - 8061,
- `"rx_bytes"` - 1514413,
- `"rx_errors"` - 0,
- `"rx_dropped"` - 0,
- `"rx_overruns"` - 0,
- `"rx_frame"` - 0,
- `"tx_packets"` - 4502,
- `"tx_bytes"` - 866622,
- `"tx_errors"` - 0,
- `"tx_dropped"` - 0,
- `"tx_overruns"` - 0,
- `"tx_carrier"` - 0,
- `"tx_collisions"` - 0,
- `"metric"` - null
"mtu": 1500,
"ipv4_addr": "192.168.71.137",
"ipv4_mask": "255.255.255.0",
"ipv4_bcast": "192.168.71.255",
"ipv6_addr": "fe80::c1cb:715d:bc3e:b8a0",
"ipv6_mask": 64,
"ipv6_scope": "0x20",
"mac_addr": "00:0c:29:3b:58:0e",
"type": "Ethernet",
"rx_packets": 8061,
"rx_bytes": 1514413,
"rx_errors": 0,
"rx_dropped": 0,
"rx_overruns": 0,
"rx_frame": 0,
"tx_packets": 4502,
"tx_bytes": 866622,
"tx_errors": 0,
"tx_dropped": 0,
"tx_overruns": 0,
"tx_carrier": 0,
"tx_collisions": 0,
"metric": null
},
{
- `"name"` - "lo",
- `"flags"` - 73,
- `"state"` - [
"name": "lo",
"flags": 73,
"state": [
"UP",
"LOOPBACK",
"RUNNING"
],
- `"mtu"` - 65536,
- `"ipv4_addr"` - "127.0.0.1",
- `"ipv4_mask"` - "255.0.0.0",
- `"ipv4_bcast"` - null,
- `"ipv6_addr"` - "::1",
- `"ipv6_mask"` - 128,
- `"ipv6_scope"` - "0x10",
- `"mac_addr"` - null,
- `"type"` - "Local Loopback",
- `"rx_packets"` - 73,
- `"rx_bytes"` - 6009,
- `"rx_errors"` - 0,
- `"rx_dropped"` - 0,
- `"rx_overruns"` - 0,
- `"rx_frame"` - 0,
- `"tx_packets"` - 73,
- `"tx_bytes"` - 6009,
- `"tx_errors"` - 0,
- `"tx_dropped"` - 0,
- `"tx_overruns"` - 0,
- `"tx_carrier"` - 0,
- `"tx_collisions"` - 0,
- `"metric"` - null
"mtu": 65536,
"ipv4_addr": "127.0.0.1",
"ipv4_mask": "255.0.0.0",
"ipv4_bcast": null,
"ipv6_addr": "::1",
"ipv6_mask": 128,
"ipv6_scope": "0x10",
"mac_addr": null,
"type": "Local Loopback",
"rx_packets": 73,
"rx_bytes": 6009,
"rx_errors": 0,
"rx_dropped": 0,
"rx_overruns": 0,
"rx_frame": 0,
"tx_packets": 73,
"tx_bytes": 6009,
"tx_errors": 0,
"tx_dropped": 0,
"tx_overruns": 0,
"tx_carrier": 0,
"tx_collisions": 0,
"metric": null
}
]
$ ifconfig | jc --ifconfig -p -r
[
{
- `"name"` - "ens33",
- `"flags"` - "4163",
- `"state"` - "UP,BROADCAST,RUNNING,MULTICAST",
- `"mtu"` - "1500",
- `"ipv4_addr"` - "192.168.71.137",
- `"ipv4_mask"` - "255.255.255.0",
- `"ipv4_bcast"` - "192.168.71.255",
- `"ipv6_addr"` - "fe80::c1cb:715d:bc3e:b8a0",
- `"ipv6_mask"` - "64",
- `"ipv6_scope"` - "0x20",
- `"mac_addr"` - "00:0c:29:3b:58:0e",
- `"type"` - "Ethernet",
- `"rx_packets"` - "8061",
- `"rx_bytes"` - "1514413",
- `"rx_errors"` - "0",
- `"rx_dropped"` - "0",
- `"rx_overruns"` - "0",
- `"rx_frame"` - "0",
- `"tx_packets"` - "4502",
- `"tx_bytes"` - "866622",
- `"tx_errors"` - "0",
- `"tx_dropped"` - "0",
- `"tx_overruns"` - "0",
- `"tx_carrier"` - "0",
- `"tx_collisions"` - "0",
- `"metric"` - null
"name": "ens33",
"flags": "4163",
"state": "UP,BROADCAST,RUNNING,MULTICAST",
"mtu": "1500",
"ipv4_addr": "192.168.71.137",
"ipv4_mask": "255.255.255.0",
"ipv4_bcast": "192.168.71.255",
"ipv6_addr": "fe80::c1cb:715d:bc3e:b8a0",
"ipv6_mask": "64",
"ipv6_scope": "0x20",
"mac_addr": "00:0c:29:3b:58:0e",
"type": "Ethernet",
"rx_packets": "8061",
"rx_bytes": "1514413",
"rx_errors": "0",
"rx_dropped": "0",
"rx_overruns": "0",
"rx_frame": "0",
"tx_packets": "4502",
"tx_bytes": "866622",
"tx_errors": "0",
"tx_dropped": "0",
"tx_overruns": "0",
"tx_carrier": "0",
"tx_collisions": "0",
"metric": null
},
{
- `"name"` - "lo",
- `"flags"` - "73",
- `"state"` - "UP,LOOPBACK,RUNNING",
- `"mtu"` - "65536",
- `"ipv4_addr"` - "127.0.0.1",
- `"ipv4_mask"` - "255.0.0.0",
- `"ipv4_bcast"` - null,
- `"ipv6_addr"` - "::1",
- `"ipv6_mask"` - "128",
- `"ipv6_scope"` - "0x10",
- `"mac_addr"` - null,
- `"type"` - "Local Loopback",
- `"rx_packets"` - "73",
- `"rx_bytes"` - "6009",
- `"rx_errors"` - "0",
- `"rx_dropped"` - "0",
- `"rx_overruns"` - "0",
- `"rx_frame"` - "0",
- `"tx_packets"` - "73",
- `"tx_bytes"` - "6009",
- `"tx_errors"` - "0",
- `"tx_dropped"` - "0",
- `"tx_overruns"` - "0",
- `"tx_carrier"` - "0",
- `"tx_collisions"` - "0",
- `"metric"` - null
"name": "lo",
"flags": "73",
"state": "UP,LOOPBACK,RUNNING",
"mtu": "65536",
"ipv4_addr": "127.0.0.1",
"ipv4_mask": "255.0.0.0",
"ipv4_bcast": null,
"ipv6_addr": "::1",
"ipv6_mask": "128",
"ipv6_scope": "0x10",
"mac_addr": null,
"type": "Local Loopback",
"rx_packets": "73",
"rx_bytes": "6009",
"rx_errors": "0",
"rx_dropped": "0",
"rx_overruns": "0",
"rx_frame": "0",
"tx_packets": "73",
"tx_bytes": "6009",
"tx_errors": "0",
"tx_dropped": "0",
"tx_overruns": "0",
"tx_carrier": "0",
"tx_collisions": "0",
"metric": null
}
]
@ -220,9 +219,7 @@ ifconfig parser module written by threeheadedknight@protonmail.com
def __init__(console_output)
```
**Arguments**:
- `console_output`:
:param console_output:
<a id="jc.parsers.ifconfig._IfconfigParser.list_interfaces"></a>
@ -232,6 +229,8 @@ def __init__(console_output)
def list_interfaces()
```
:return:
<a id="jc.parsers.ifconfig._IfconfigParser.count_interfaces"></a>
#### count\_interfaces
@ -240,6 +239,8 @@ def list_interfaces()
def count_interfaces()
```
:return:
<a id="jc.parsers.ifconfig._IfconfigParser.filter_interfaces"></a>
#### filter\_interfaces
@ -248,9 +249,8 @@ def count_interfaces()
def filter_interfaces(**kwargs)
```
**Arguments**:
- `kwargs`:
:param kwargs:
:return:
<a id="jc.parsers.ifconfig._IfconfigParser.get_interface"></a>
@ -260,9 +260,8 @@ def filter_interfaces(**kwargs)
def get_interface(name)
```
**Arguments**:
- `name`:
:param name:
:return:
<a id="jc.parsers.ifconfig._IfconfigParser.get_interfaces"></a>
@ -272,6 +271,8 @@ def get_interface(name)
def get_interfaces()
```
:return:
<a id="jc.parsers.ifconfig._IfconfigParser.is_available"></a>
#### is\_available
@ -280,9 +281,8 @@ def get_interfaces()
def is_available(name)
```
**Arguments**:
- `name`:
:param name:
:return:
<a id="jc.parsers.ifconfig._IfconfigParser.parser"></a>
@ -292,9 +292,8 @@ def is_available(name)
def parser(source_data)
```
**Arguments**:
- `source_data`:
:param source_data:
:return:
<a id="jc.parsers.ifconfig.parse"></a>
@ -306,16 +305,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -15,30 +15,29 @@ command-line argument or the `raw=True` argument in `parse()`.
Usage (cli):
$ cat foo.ini | jc --ini
$ cat foo.ini | jc --ini
Usage (module):
import jc
result = jc.parse('ini', ini_file_output)
import jc
result = jc.parse('ini', ini_file_output)
or
or
import jc.parsers.ini
result = jc.parsers.ini.parse(ini_file_output)
import jc.parsers.ini
result = jc.parsers.ini.parse(ini_file_output)
Schema:
ini or key/value document converted to a dictionary - see the
configparser standard library documentation for more details.
ini or key/value document converted to a dictionary - see the
configparser standard library documentation for more details.
{
"key1": string,
"key2": string
}
**Examples**:
{
"key1": string,
"key2": string
}
Examples:
$ cat example.ini
[DEFAULT]
@ -56,19 +55,19 @@ configparser standard library documentation for more details.
$ cat example.ini | jc --ini -p
{
- `"bitbucket.org"` - {
- `"serveraliveinterval"` - "45",
- `"compression"` - "yes",
- `"compressionlevel"` - "9",
- `"forwardx11"` - "yes",
- `"user"` - "hg"
"bitbucket.org": {
"serveraliveinterval": "45",
"compression": "yes",
"compressionlevel": "9",
"forwardx11": "yes",
"user": "hg"
},
- `"topsecret.server.com"` - {
- `"serveraliveinterval"` - "45",
- `"compression"` - "yes",
- `"compressionlevel"` - "9",
- `"forwardx11"` - "no",
- `"port"` - "50022"
"topsecret.server.com": {
"serveraliveinterval": "45",
"compression": "yes",
"compressionlevel": "9",
"forwardx11": "no",
"port": "50022"
}
}
@ -92,16 +91,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary representing the ini file

View File

@ -9,159 +9,158 @@ Note: `iostat` version 11 and higher include a JSON output option
Usage (cli):
$ iostat | jc --iostat
$ iostat | jc --iostat
or
or
$ jc iostat
$ jc iostat
Usage (module):
import jc
result = jc.parse('iostat', iostat_command_output)
import jc
result = jc.parse('iostat', iostat_command_output)
or
or
import jc.parsers.iostat
result = jc.parsers.iostat.parse(iostat_command_output)
import jc.parsers.iostat
result = jc.parsers.iostat.parse(iostat_command_output)
Schema:
[
{
"type": string,
"percent_user": float,
"percent_nice": float,
"percent_system": float,
"percent_iowait": float,
"percent_steal": float,
"percent_idle": float,
"device": string,
"tps": float,
"kb_read_s": float,
"mb_read_s": float,
"kb_wrtn_s": float,
"mb_wrtn_s": float,
"kb_read": integer,
"mb_read": integer,
"kb_wrtn": integer,
"mb_wrtn": integer,
'kb_dscd': integer,
'mb_dscd': integer,
"rrqm_s": float,
"wrqm_s": float,
"r_s": float,
"w_s": float,
"rmb_s": float,
"rkb_s": float,
"wmb_s": float,
"wkb_s": float,
"avgrq_sz": float,
"avgqu_sz": float,
"await": float,
"r_await": float,
"w_await": float,
"svctm": float,
"aqu_sz": float,
"rareq_sz": float,
"wareq_sz": float,
"d_s": float,
"dkb_s": float,
"dmb_s": float,
"drqm_s": float,
"percent_drqm": float,
"d_await": float,
"dareq_sz": float,
"f_s": float,
"f_await": float,
"kb_dscd_s": float,
"mb_dscd_s": float,
"percent_util": float,
"percent_rrqm": float,
"percent_wrqm": float
}
]
**Examples**:
[
{
"type": string,
"percent_user": float,
"percent_nice": float,
"percent_system": float,
"percent_iowait": float,
"percent_steal": float,
"percent_idle": float,
"device": string,
"tps": float,
"kb_read_s": float,
"mb_read_s": float,
"kb_wrtn_s": float,
"mb_wrtn_s": float,
"kb_read": integer,
"mb_read": integer,
"kb_wrtn": integer,
"mb_wrtn": integer,
'kb_dscd': integer,
'mb_dscd': integer,
"rrqm_s": float,
"wrqm_s": float,
"r_s": float,
"w_s": float,
"rmb_s": float,
"rkb_s": float,
"wmb_s": float,
"wkb_s": float,
"avgrq_sz": float,
"avgqu_sz": float,
"await": float,
"r_await": float,
"w_await": float,
"svctm": float,
"aqu_sz": float,
"rareq_sz": float,
"wareq_sz": float,
"d_s": float,
"dkb_s": float,
"dmb_s": float,
"drqm_s": float,
"percent_drqm": float,
"d_await": float,
"dareq_sz": float,
"f_s": float,
"f_await": float,
"kb_dscd_s": float,
"mb_dscd_s": float,
"percent_util": float,
"percent_rrqm": float,
"percent_wrqm": float
}
]
Examples:
$ iostat | jc --iostat -p
[
{
- `"percent_user"` - 0.15,
- `"percent_nice"` - 0.0,
- `"percent_system"` - 0.18,
- `"percent_iowait"` - 0.0,
- `"percent_steal"` - 0.0,
- `"percent_idle"` - 99.67,
- `"type"` - "cpu"
"percent_user": 0.15,
"percent_nice": 0.0,
"percent_system": 0.18,
"percent_iowait": 0.0,
"percent_steal": 0.0,
"percent_idle": 99.67,
"type": "cpu"
},
{
- `"device"` - "sda",
- `"tps"` - 0.29,
- `"kb_read_s"` - 7.22,
- `"kb_wrtn_s"` - 1.25,
- `"kb_read"` - 194341,
- `"kb_wrtn"` - 33590,
- `"type"` - "device"
"device": "sda",
"tps": 0.29,
"kb_read_s": 7.22,
"kb_wrtn_s": 1.25,
"kb_read": 194341,
"kb_wrtn": 33590,
"type": "device"
},
{
- `"device"` - "dm-0",
- `"tps"` - 0.29,
- `"kb_read_s"` - 5.99,
- `"kb_wrtn_s"` - 1.17,
- `"kb_read"` - 161361,
- `"kb_wrtn"` - 31522,
- `"type"` - "device"
"device": "dm-0",
"tps": 0.29,
"kb_read_s": 5.99,
"kb_wrtn_s": 1.17,
"kb_read": 161361,
"kb_wrtn": 31522,
"type": "device"
},
{
- `"device"` - "dm-1",
- `"tps"` - 0.0,
- `"kb_read_s"` - 0.08,
- `"kb_wrtn_s"` - 0.0,
- `"kb_read"` - 2204,
- `"kb_wrtn"` - 0,
- `"type"` - "device"
"device": "dm-1",
"tps": 0.0,
"kb_read_s": 0.08,
"kb_wrtn_s": 0.0,
"kb_read": 2204,
"kb_wrtn": 0,
"type": "device"
}
]
$ iostat | jc --iostat -p -r
[
{
- `"percent_user"` - "0.15",
- `"percent_nice"` - "0.00",
- `"percent_system"` - "0.18",
- `"percent_iowait"` - "0.00",
- `"percent_steal"` - "0.00",
- `"percent_idle"` - "99.67",
- `"type"` - "cpu"
"percent_user": "0.15",
"percent_nice": "0.00",
"percent_system": "0.18",
"percent_iowait": "0.00",
"percent_steal": "0.00",
"percent_idle": "99.67",
"type": "cpu"
},
{
- `"device"` - "sda",
- `"tps"` - "0.29",
- `"kb_read_s"` - "7.22",
- `"kb_wrtn_s"` - "1.25",
- `"kb_read"` - "194341",
- `"kb_wrtn"` - "33590",
- `"type"` - "device"
"device": "sda",
"tps": "0.29",
"kb_read_s": "7.22",
"kb_wrtn_s": "1.25",
"kb_read": "194341",
"kb_wrtn": "33590",
"type": "device"
},
{
- `"device"` - "dm-0",
- `"tps"` - "0.29",
- `"kb_read_s"` - "5.99",
- `"kb_wrtn_s"` - "1.17",
- `"kb_read"` - "161361",
- `"kb_wrtn"` - "31522",
- `"type"` - "device"
"device": "dm-0",
"tps": "0.29",
"kb_read_s": "5.99",
"kb_wrtn_s": "1.17",
"kb_read": "161361",
"kb_wrtn": "31522",
"type": "device"
},
{
- `"device"` - "dm-1",
- `"tps"` - "0.00",
- `"kb_read_s"` - "0.08",
- `"kb_wrtn_s"` - "0.00",
- `"kb_read"` - "2204",
- `"kb_wrtn"` - "0",
- `"type"` - "device"
"device": "dm-1",
"tps": "0.00",
"kb_read_s": "0.08",
"kb_wrtn_s": "0.00",
"kb_read": "2204",
"kb_wrtn": "0",
"type": "device"
}
]
@ -185,16 +184,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -11,90 +11,89 @@ Note: `iostat` version 11 and higher include a JSON output option
Usage (cli):
$ iostat | jc --iostat-s
$ iostat | jc --iostat-s
Usage (module):
import jc
# result is an iterable object (generator)
result = jc.parse('iostat_s', iostat_command_output.splitlines())
for item in result:
# do something
import jc
# result is an iterable object (generator)
result = jc.parse('iostat_s', iostat_command_output.splitlines())
for item in result:
# do something
or
or
import jc.parsers.iostat_s
# result is an iterable object (generator)
result = jc.parsers.iostat_s.parse(iostat_command_output.splitlines())
for item in result:
# do something
import jc.parsers.iostat_s
# result is an iterable object (generator)
result = jc.parsers.iostat_s.parse(iostat_command_output.splitlines())
for item in result:
# do something
Schema:
{
"type": string,
"percent_user": float,
"percent_nice": float,
"percent_system": float,
"percent_iowait": float,
"percent_steal": float,
"percent_idle": float,
"device": string,
"tps": float,
"kb_read_s": float,
"mb_read_s": float,
"kb_wrtn_s": float,
"mb_wrtn_s": float,
"kb_read": integer,
"mb_read": integer,
"kb_wrtn": integer,
"mb_wrtn": integer,
'kb_dscd': integer,
'mb_dscd': integer,
"rrqm_s": float,
"wrqm_s": float,
"r_s": float,
"w_s": float,
"rmb_s": float,
"rkb_s": float,
"wmb_s": float,
"wkb_s": float,
"avgrq_sz": float,
"avgqu_sz": float,
"await": float,
"r_await": float,
"w_await": float,
"svctm": float,
"aqu_sz": float,
"rareq_sz": float,
"wareq_sz": float,
"d_s": float,
"dkb_s": float,
"dmb_s": float,
"drqm_s": float,
"percent_drqm": float,
"d_await": float,
"dareq_sz": float,
"f_s": float,
"f_await": float,
"kb_dscd_s": float,
"mb_dscd_s": float,
"percent_util": float,
"percent_rrqm": float,
"percent_wrqm": float,
{
"type": string,
"percent_user": float,
"percent_nice": float,
"percent_system": float,
"percent_iowait": float,
"percent_steal": float,
"percent_idle": float,
"device": string,
"tps": float,
"kb_read_s": float,
"mb_read_s": float,
"kb_wrtn_s": float,
"mb_wrtn_s": float,
"kb_read": integer,
"mb_read": integer,
"kb_wrtn": integer,
"mb_wrtn": integer,
'kb_dscd': integer,
'mb_dscd': integer,
"rrqm_s": float,
"wrqm_s": float,
"r_s": float,
"w_s": float,
"rmb_s": float,
"rkb_s": float,
"wmb_s": float,
"wkb_s": float,
"avgrq_sz": float,
"avgqu_sz": float,
"await": float,
"r_await": float,
"w_await": float,
"svctm": float,
"aqu_sz": float,
"rareq_sz": float,
"wareq_sz": float,
"d_s": float,
"dkb_s": float,
"dmb_s": float,
"drqm_s": float,
"percent_drqm": float,
"d_await": float,
"dareq_sz": float,
"f_s": float,
"f_await": float,
"kb_dscd_s": float,
"mb_dscd_s": float,
"percent_util": float,
"percent_rrqm": float,
"percent_wrqm": float,
# Below object only exists if using -qq or ignore_exceptions=True
# Below object only exists if using -qq or ignore_exceptions=True
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
**Examples**:
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
Examples:
$ iostat | jc --iostat-s
{"percent_user":0.14,"percent_nice":0.0,"percent_system":0.16,...}
@ -126,25 +125,20 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False)
Main text parsing generator function. Returns an iterator object.
**Arguments**:
Parameters:
- `data` - (iterable) line-based text data to parse
data: (iterable) line-based text data to parse
(e.g. sys.stdin or str.splitlines())
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
**Yields**:
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
Yields:
Dictionary. Raw or processed structured data.
**Returns**:
Returns:
Iterator object

View File

@ -9,101 +9,100 @@ Supports `-vLn` and `--line-numbers` for all tables.
Usage (cli):
$ sudo iptables -L -t nat | jc --iptables
$ sudo iptables -L -t nat | jc --iptables
or
or
$ jc iptables -L -t nat
$ jc iptables -L -t nat
Usage (module):
import jc
result = jc.parse('iptables', iptables_command_output)
import jc
result = jc.parse('iptables', iptables_command_output)
or
or
import jc.parsers.iptables
result = jc.parsers.iptables.parse(iptables_command_output)
import jc.parsers.iptables
result = jc.parsers.iptables.parse(iptables_command_output)
Schema:
[
{
"chain": string,
"rules": [
{
"num" integer,
"pkts": integer,
"bytes": integer, # converted based on suffix
"target": string,
"prot": string,
"opt": string, # "--" = Null
"in": string,
"out": string,
"source": string,
"destination": string,
"options": string
}
]
}
]
**Examples**:
[
{
"chain": string,
"rules": [
{
"num" integer,
"pkts": integer,
"bytes": integer, # converted based on suffix
"target": string,
"prot": string,
"opt": string, # "--" = Null
"in": string,
"out": string,
"source": string,
"destination": string,
"options": string
}
]
}
]
Examples:
$ sudo iptables --line-numbers -v -L -t nat | jc --iptables -p
[
{
- `"chain"` - "PREROUTING",
- `"rules"` - [
"chain": "PREROUTING",
"rules": [
{
- `"num"` - 1,
- `"pkts"` - 2183,
- `"bytes"` - 186000,
- `"target"` - "PREROUTING_direct",
- `"prot"` - "all",
- `"opt"` - null,
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere"
"num": 1,
"pkts": 2183,
"bytes": 186000,
"target": "PREROUTING_direct",
"prot": "all",
"opt": null,
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere"
},
{
- `"num"` - 2,
- `"pkts"` - 2183,
- `"bytes"` - 186000,
- `"target"` - "PREROUTING_ZONES_SOURCE",
- `"prot"` - "all",
- `"opt"` - null,
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere"
"num": 2,
"pkts": 2183,
"bytes": 186000,
"target": "PREROUTING_ZONES_SOURCE",
"prot": "all",
"opt": null,
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere"
},
{
- `"num"` - 3,
- `"pkts"` - 2183,
- `"bytes"` - 186000,
- `"target"` - "PREROUTING_ZONES",
- `"prot"` - "all",
- `"opt"` - null,
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere"
"num": 3,
"pkts": 2183,
"bytes": 186000,
"target": "PREROUTING_ZONES",
"prot": "all",
"opt": null,
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere"
},
{
- `"num"` - 4,
- `"pkts"` - 0,
- `"bytes"` - 0,
- `"target"` - "DOCKER",
- `"prot"` - "all",
- `"opt"` - null,
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere",
- `"options"` - "ADDRTYPE match dst-type LOCAL"
"num": 4,
"pkts": 0,
"bytes": 0,
"target": "DOCKER",
"prot": "all",
"opt": null,
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere",
"options": "ADDRTYPE match dst-type LOCAL"
}
]
},
@ -113,56 +112,56 @@ Schema:
$ sudo iptables --line-numbers -v -L -t nat | jc --iptables -p -r
[
{
- `"chain"` - "PREROUTING",
- `"rules"` - [
"chain": "PREROUTING",
"rules": [
{
- `"num"` - "1",
- `"pkts"` - "2183",
- `"bytes"` - "186K",
- `"target"` - "PREROUTING_direct",
- `"prot"` - "all",
- `"opt"` - "--",
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere"
"num": "1",
"pkts": "2183",
"bytes": "186K",
"target": "PREROUTING_direct",
"prot": "all",
"opt": "--",
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere"
},
{
- `"num"` - "2",
- `"pkts"` - "2183",
- `"bytes"` - "186K",
- `"target"` - "PREROUTING_ZONES_SOURCE",
- `"prot"` - "all",
- `"opt"` - "--",
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere"
"num": "2",
"pkts": "2183",
"bytes": "186K",
"target": "PREROUTING_ZONES_SOURCE",
"prot": "all",
"opt": "--",
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere"
},
{
- `"num"` - "3",
- `"pkts"` - "2183",
- `"bytes"` - "186K",
- `"target"` - "PREROUTING_ZONES",
- `"prot"` - "all",
- `"opt"` - "--",
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere"
"num": "3",
"pkts": "2183",
"bytes": "186K",
"target": "PREROUTING_ZONES",
"prot": "all",
"opt": "--",
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere"
},
{
- `"num"` - "4",
- `"pkts"` - "0",
- `"bytes"` - "0",
- `"target"` - "DOCKER",
- `"prot"` - "all",
- `"opt"` - "--",
- `"in"` - "any",
- `"out"` - "any",
- `"source"` - "anywhere",
- `"destination"` - "anywhere",
- `"options"` - "ADDRTYPE match dst-type LOCAL"
"num": "4",
"pkts": "0",
"bytes": "0",
"target": "DOCKER",
"prot": "all",
"opt": "--",
"in": "any",
"out": "any",
"source": "anywhere",
"destination": "anywhere",
"options": "ADDRTYPE match dst-type LOCAL"
}
]
},
@ -189,16 +188,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -10,44 +10,43 @@ are not enough samples to test.
Usage (cli):
$ iw dev wlan0 scan | jc --iw-scan
$ iw dev wlan0 scan | jc --iw-scan
or
or
$ jc iw dev wlan0 scan
$ jc iw dev wlan0 scan
Usage (module):
import jc
result = jc.parse('iw_scan', iw_scan_command_output)
import jc
result = jc.parse('iw_scan', iw_scan_command_output)
or
or
import jc.parsers.iw_scan
result = jc.parsers.iw_scan.parse(iw_scan_command_output)
import jc.parsers.iw_scan
result = jc.parsers.iw_scan.parse(iw_scan_command_output)
Schema:
[
{
"foo": string/integer/float, # best guess based on value
"bar": string/integer/float,
"baz": string/integer/float
}
]
**Examples**:
[
{
"foo": string/integer/float, # best guess based on value
"bar": string/integer/float,
"baz": string/integer/float
}
]
Examples:
$ iw dev wlan0 scan | jc --iw-scan -p
[
{
- `"bssid"` - "71:31:72:65:e1:a2",
- `"interface"` - "wlan0",
- `"freq"` - 2462,
- `"capability"` - "ESS Privacy ShortSlotTime (0x0411)",
- `"ssid"` - "WLAN-1234",
- `"supported_rates"` - [
"bssid": "71:31:72:65:e1:a2",
"interface": "wlan0",
"freq": 2462,
"capability": "ESS Privacy ShortSlotTime (0x0411)",
"ssid": "WLAN-1234",
"supported_rates": [
1.0,
2.0,
5.5,
@ -57,72 +56,72 @@ Schema:
36.0,
54.0
],
- `"erp"` - "<no flags>",
- `"erp_d4.0"` - "<no flags>",
- `"rsn"` - "Version: 1",
- `"group_cipher"` - "CCMP",
- `"pairwise_ciphers"` - "CCMP",
- `"authentication_suites"` - "PSK",
- `"capabilities"` - "0x186c",
- `"extended_supported_rates"` - [
"erp": "<no flags>",
"erp_d4.0": "<no flags>",
"rsn": "Version: 1",
"group_cipher": "CCMP",
"pairwise_ciphers": "CCMP",
"authentication_suites": "PSK",
"capabilities": "0x186c",
"extended_supported_rates": [
6.0,
9.0,
12.0,
48.0
],
- `"ht_rx_mcs_rate_indexes_supported"` - "0-15",
- `"primary_channel"` - 11,
- `"secondary_channel_offset"` - "no secondary",
- `"rifs"` - 1,
- `"ht_protection"` - "no",
- `"non-gf_present"` - 1,
- `"obss_non-gf_present"` - 0,
- `"dual_beacon"` - 0,
- `"dual_cts_protection"` - 0,
- `"stbc_beacon"` - 0,
- `"l-sig_txop_prot"` - 0,
- `"pco_active"` - 0,
- `"pco_phase"` - 0,
- `"bss_width_channel_transition_delay_factor"` - 5,
- `"extended_capabilities"` - "HT Information Exchange Supported",
- `"wmm"` - "Parameter version 1",
- `"be"` - "CW 15-1023, AIFSN 3",
- `"bk"` - "CW 15-1023, AIFSN 7",
- `"vi"` - "CW 7-15, AIFSN 2, TXOP 3008 usec",
- `"vo"` - "CW 3-7, AIFSN 2, TXOP 1504 usec",
- `"wps"` - "Version: 1.0",
- `"wi-fi_protected_setup_state"` - "2 (Configured)",
- `"selected_registrar"` - "0x0",
- `"response_type"` - "3 (AP)",
- `"uuid"` - "00000000-0000-0003-0000-75317074f1a2",
- `"manufacturer"` - "Corporation",
- `"model"` - "VGV8539JW",
- `"model_number"` - "1.47.000",
- `"serial_number"` - "J144024542",
- `"primary_device_type"` - "6-0050f204-1",
- `"device_name"` - "Wireless Router(WFA)",
- `"config_methods"` - "Label, PBC",
- `"rf_bands"` - "0x3",
- `"tsf_usec"` - 212098649788,
- `"sta_channel_width_mhz"` - 20,
- `"passive_dwell_tus"` - 20,
- `"active_dwell_tus"` - 10,
- `"channel_width_trigger_scan_interval_s"` - 300,
- `"scan_passive_total_per_channel_tus"` - 200,
- `"scan_active_total_per_channel_tus"` - 20,
- `"beacon_interval_tus"` - 100,
- `"signal_dbm"` - -80.0,
- `"last_seen_ms"` - 11420,
- `"selected_rates"` - [
"ht_rx_mcs_rate_indexes_supported": "0-15",
"primary_channel": 11,
"secondary_channel_offset": "no secondary",
"rifs": 1,
"ht_protection": "no",
"non-gf_present": 1,
"obss_non-gf_present": 0,
"dual_beacon": 0,
"dual_cts_protection": 0,
"stbc_beacon": 0,
"l-sig_txop_prot": 0,
"pco_active": 0,
"pco_phase": 0,
"bss_width_channel_transition_delay_factor": 5,
"extended_capabilities": "HT Information Exchange Supported",
"wmm": "Parameter version 1",
"be": "CW 15-1023, AIFSN 3",
"bk": "CW 15-1023, AIFSN 7",
"vi": "CW 7-15, AIFSN 2, TXOP 3008 usec",
"vo": "CW 3-7, AIFSN 2, TXOP 1504 usec",
"wps": "Version: 1.0",
"wi-fi_protected_setup_state": "2 (Configured)",
"selected_registrar": "0x0",
"response_type": "3 (AP)",
"uuid": "00000000-0000-0003-0000-75317074f1a2",
"manufacturer": "Corporation",
"model": "VGV8539JW",
"model_number": "1.47.000",
"serial_number": "J144024542",
"primary_device_type": "6-0050f204-1",
"device_name": "Wireless Router(WFA)",
"config_methods": "Label, PBC",
"rf_bands": "0x3",
"tsf_usec": 212098649788,
"sta_channel_width_mhz": 20,
"passive_dwell_tus": 20,
"active_dwell_tus": 10,
"channel_width_trigger_scan_interval_s": 300,
"scan_passive_total_per_channel_tus": 200,
"scan_active_total_per_channel_tus": 20,
"beacon_interval_tus": 100,
"signal_dbm": -80.0,
"last_seen_ms": 11420,
"selected_rates": [
1.0,
2.0,
5.5,
11.0
],
- `"obss_scan_activity_threshold_percent"` - 0.25,
- `"ds_parameter_set_channel"` - 11,
- `"max_amsdu_length_bytes"` - 7935,
- `"minimum_rx_ampdu_time_spacing_usec"` - 16
"obss_scan_activity_threshold_percent": 0.25,
"ds_parameter_set_channel": 11,
"max_amsdu_length_bytes": 7935,
"minimum_rx_ampdu_time_spacing_usec": 16
},
...
]
@ -147,16 +146,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,29 +7,28 @@ jc - JSON CLI output utility `MANIFEST.MF` file parser
Usage (cli):
$ cat MANIFEST.MF | jc --jar-manifest
$ cat MANIFEST.MF | jc --jar-manifest
Usage (module):
import jc
result = jc.parse('jar_manifest', jar_manifest_file_output)
import jc
result = jc.parse('jar_manifest', jar_manifest_file_output)
or
or
import jc.parsers.jar_manifest
result = jc.parsers.jar_manifest.parse(jar_manifest_file_output)
import jc.parsers.jar_manifest
result = jc.parsers.jar_manifest.parse(jar_manifest_file_output)
Schema:
[
{
"key1": string,
"key2": string
}
]
**Examples**:
[
{
"key1": string,
"key2": string
}
]
Examples:
$ cat MANIFEST.MF | jc --jar-manifest -p
$ unzip -c log4j-core-2.16.0.jar META-INF/MANIFEST.MF | \\
@ -40,16 +39,16 @@ Schema:
$ cat MANIFEST.MF | jc --jar-manifest -p
[
{
- `"Import_Package"` - "com.conversantmedia.util.concurrent;resoluti...",
- `"Export_Package"` - "org.apache.logging.log4j.core;uses:=\"org.ap...",
- `"Manifest_Version"` - "1.0",
- `"Bundle_License"` - "https://www.apache.org/licenses/LICENSE-2.0.txt",
- `"Bundle_SymbolicName"` - "org.apache.logging.log4j.core",
- `"Built_By"` - "matt",
- `"Bnd_LastModified"` - "1639373735804",
- `"Implementation_Vendor_Id"` - "org.apache.logging.log4j",
- `"Specification_Title"` - "Apache Log4j Core",
- `"Log4jReleaseManager"` - "Matt Sicker",
"Import_Package": "com.conversantmedia.util.concurrent;resoluti...",
"Export_Package": "org.apache.logging.log4j.core;uses:=\"org.ap...",
"Manifest_Version": "1.0",
"Bundle_License": "https://www.apache.org/licenses/LICENSE-2.0.txt",
"Bundle_SymbolicName": "org.apache.logging.log4j.core",
"Built_By": "matt",
"Bnd_LastModified": "1639373735804",
"Implementation_Vendor_Id": "org.apache.logging.log4j",
"Specification_Title": "Apache Log4j Core",
"Log4jReleaseManager": "Matt Sicker",
...
}
]
@ -59,25 +58,25 @@ Schema:
[
...
{
- `"Archive"` - "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-so...",
- `"Manifest_Version"` - "1.0",
- `"Built_By"` - "matt",
- `"Created_By"` - "Apache Maven 3.8.4",
- `"Build_Jdk"` - "1.8.0_312"
"Archive": "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-so...",
"Manifest_Version": "1.0",
"Built_By": "matt",
"Created_By": "Apache Maven 3.8.4",
"Build_Jdk": "1.8.0_312"
},
{
- `"Archive"` - "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-ja...",
- `"Manifest_Version"` - "1.0",
- `"Built_By"` - "matt",
- `"Created_By"` - "Apache Maven 3.8.4",
- `"Build_Jdk"` - "1.8.0_312"
"Archive": "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-ja...",
"Manifest_Version": "1.0",
"Built_By": "matt",
"Created_By": "Apache Maven 3.8.4",
"Build_Jdk": "1.8.0_312"
},
{
- `"Bundle_SymbolicName"` - "org.apache.logging.log4j.spring-cloud-c...",
- `"Export_Package"` - "org.apache.logging.log4j.spring.cloud.config...",
- `"Archive"` - "apache-log4j-2.16.0-bin/log4j-spring-cloud-config-c...",
- `"Manifest_Version"` - "1.0",
- `"Bundle_License"` - "https://www.apache.org/licenses/LICENSE-2.0.txt",
"Bundle_SymbolicName": "org.apache.logging.log4j.spring-cloud-c...",
"Export_Package": "org.apache.logging.log4j.spring.cloud.config...",
"Archive": "apache-log4j-2.16.0-bin/log4j-spring-cloud-config-c...",
"Manifest_Version": "1.0",
"Bundle_License": "https://www.apache.org/licenses/LICENSE-2.0.txt",
...
}
...
@ -103,16 +102,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -12,90 +12,89 @@ builtin.
Usage (cli):
$ jobs | jc --jobs
$ jobs | jc --jobs
Usage (module):
import jc
result = jc.parse('jobs', jobs_command_output)
import jc
result = jc.parse('jobs', jobs_command_output)
or
or
import jc.parsers.jobs
result = jc.parsers.jobs.parse(jobs_command_output)
import jc.parsers.jobs
result = jc.parsers.jobs.parse(jobs_command_output)
Schema:
[
{
"job_number": integer,
"pid": integer,
"history": string,
"status": string,
"command": string
}
]
**Example**:
[
{
"job_number": integer,
"pid": integer,
"history": string,
"status": string,
"command": string
}
]
Example:
$ jobs -l | jc --jobs -p
[
{
- `"job_number"` - 1,
- `"pid"` - 5283,
- `"status"` - "Running",
- `"command"` - "sleep 10000 &"
"job_number": 1,
"pid": 5283,
"status": "Running",
"command": "sleep 10000 &"
},
{
- `"job_number"` - 2,
- `"pid"` - 5284,
- `"status"` - "Running",
- `"command"` - "sleep 10100 &"
"job_number": 2,
"pid": 5284,
"status": "Running",
"command": "sleep 10100 &"
},
{
- `"job_number"` - 3,
- `"pid"` - 5285,
- `"history"` - "previous",
- `"status"` - "Running",
- `"command"` - "sleep 10001 &"
"job_number": 3,
"pid": 5285,
"history": "previous",
"status": "Running",
"command": "sleep 10001 &"
},
{
- `"job_number"` - 4,
- `"pid"` - 5286,
- `"history"` - "current",
- `"status"` - "Running",
- `"command"` - "sleep 10112 &"
"job_number": 4,
"pid": 5286,
"history": "current",
"status": "Running",
"command": "sleep 10112 &"
}
]
$ jobs -l | jc --jobs -p -r
[
{
- `"job_number"` - "1",
- `"pid"` - "19510",
- `"status"` - "Running",
- `"command"` - "sleep 1000 &"
"job_number": "1",
"pid": "19510",
"status": "Running",
"command": "sleep 1000 &"
},
{
- `"job_number"` - "2",
- `"pid"` - "19511",
- `"status"` - "Running",
- `"command"` - "sleep 1001 &"
"job_number": "2",
"pid": "19511",
"status": "Running",
"command": "sleep 1001 &"
},
{
- `"job_number"` - "3",
- `"pid"` - "19512",
- `"history"` - "previous",
- `"status"` - "Running",
- `"command"` - "sleep 1002 &"
"job_number": "3",
"pid": "19512",
"history": "previous",
"status": "Running",
"command": "sleep 1002 &"
},
{
- `"job_number"` - "4",
- `"pid"` - "19513",
- `"history"` - "current",
- `"status"` - "Running",
- `"command"` - "sleep 1003 &"
"job_number": "4",
"pid": "19513",
"history": "current",
"status": "Running",
"command": "sleep 1003 &"
}
]
@ -119,16 +118,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -15,36 +15,35 @@ command-line argument or the `raw=True` argument in `parse()`.
Usage (cli):
$ cat foo.txt | jc --kv
$ cat foo.txt | jc --kv
Usage (module):
import jc
result = jc.parse('kv', kv_file_output)
import jc
result = jc.parse('kv', kv_file_output)
or
or
import jc.parsers.kv
result = jc.parsers.kv.parse(kv_file_output)
import jc.parsers.kv
result = jc.parsers.kv.parse(kv_file_output)
Schema:
key/value document converted to a dictionary - see the
configparser standard library documentation for more details.
key/value document converted to a dictionary - see the
configparser standard library documentation for more details.
{
"key1": string,
"key2": string
}
**Examples**:
{
"key1": string,
"key2": string
}
Examples:
$ cat keyvalue.txt
# this file contains key/value pairs
name = John Doe
address=555 California Drive
- `age` - 34
age: 34
; comments can include # or ;
# delimiter can be = or :
# quoted values have quotation marks stripped by default
@ -53,10 +52,10 @@ configparser standard library documentation for more details.
$ cat keyvalue.txt | jc --kv -p
{
- `"name"` - "John Doe",
- `"address"` - "555 California Drive",
- `"age"` - "34",
- `"occupation"` - "Engineer"
"name": "John Doe",
"address": "555 California Drive",
"age": "34",
"occupation": "Engineer"
}
<a id="jc.parsers.kv.info"></a>
@ -79,18 +78,15 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
Note: this is just a wrapper for jc.parsers.ini
Note: this is just a wrapper for jc.parsers.ini
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary representing the key/value file

View File

@ -13,71 +13,70 @@ system the parser is run on) since there is no timezone information in the
Usage (cli):
$ last | jc --last
$ last | jc --last
or
or
$ jc last
$ jc last
Usage (module):
import jc
result = jc.parse('last', last_command_output)
import jc
result = jc.parse('last', last_command_output)
or
or
import jc.parsers.last
result = jc.parsers.last.parse(last_command_output)
import jc.parsers.last
result = jc.parsers.last.parse(last_command_output)
Schema:
[
{
"user": string,
"tty": string,
"hostname": string,
"login": string,
"logout": string,
"duration": string,
"login_epoch": integer, # (naive) available w/last -F option
"logout_epoch": integer, # (naive) available w/last -F option
"duration_seconds": integer # available w/last -F option
}
]
**Examples**:
[
{
"user": string,
"tty": string,
"hostname": string,
"login": string,
"logout": string,
"duration": string,
"login_epoch": integer, # (naive) available w/last -F option
"logout_epoch": integer, # (naive) available w/last -F option
"duration_seconds": integer # available w/last -F option
}
]
Examples:
$ last -F | jc --last -p
[
{
- `"user"` - "kbrazil",
- `"tty"` - "ttys002",
- `"hostname"` - null,
- `"login"` - "Mon Dec 28 17:24:10 2020",
- `"logout"` - "still logged in"
"user": "kbrazil",
"tty": "ttys002",
"hostname": null,
"login": "Mon Dec 28 17:24:10 2020",
"logout": "still logged in"
},
{
- `"user"` - "kbrazil",
- `"tty"` - "ttys003",
- `"hostname"` - null,
- `"login"` - "Mon Dec 28 17:24:10 2020",
- `"logout"` - "Mon Dec 28 17:25:01 2020",
- `"duration"` - "00:00",
- `"login_epoch"` - 1565891826,
- `"logout_epoch"` - 1565895404,
- `"duration_seconds"` - 3578
"user": "kbrazil",
"tty": "ttys003",
"hostname": null,
"login": "Mon Dec 28 17:24:10 2020",
"logout": "Mon Dec 28 17:25:01 2020",
"duration": "00:00",
"login_epoch": 1565891826,
"logout_epoch": 1565895404,
"duration_seconds": 3578
},
{
- `"user"` - "kbrazil",
- `"tty"` - "ttys003",
- `"hostname"` - null,
- `"login"` - "Mon Dec 28 17:24:10 2020",
- `"logout"` - "Mon Dec 28 17:25:01 2020",
- `"duration"` - "00:00",
- `"login_epoch"` - 1565891826,
- `"logout_epoch"` - 1565895404,
- `"duration_seconds"` - 3578
"user": "kbrazil",
"tty": "ttys003",
"hostname": null,
"login": "Mon Dec 28 17:24:10 2020",
"logout": "Mon Dec 28 17:25:01 2020",
"duration": "00:00",
"login_epoch": 1565891826,
"logout_epoch": 1565895404,
"duration_seconds": 3578
},
...
]
@ -85,27 +84,27 @@ Schema:
$ last | jc --last -p -r
[
{
- `"user"` - "kbrazil",
- `"tty"` - "ttys002",
- `"hostname"` - "-",
- `"login"` - "Thu Feb 27 14:31",
- `"logout"` - "still_logged_in"
"user": "kbrazil",
"tty": "ttys002",
"hostname": "-",
"login": "Thu Feb 27 14:31",
"logout": "still_logged_in"
},
{
- `"user"` - "kbrazil",
- `"tty"` - "ttys003",
- `"hostname"` - "-",
- `"login"` - "Thu Feb 27 10:38",
- `"logout"` - "10:38",
- `"duration"` - "00:00"
"user": "kbrazil",
"tty": "ttys003",
"hostname": "-",
"login": "Thu Feb 27 10:38",
"logout": "10:38",
"duration": "00:00"
},
{
- `"user"` - "kbrazil",
- `"tty"` - "ttys003",
- `"hostname"` - "-",
- `"login"` - "Thu Feb 27 10:18",
- `"logout"` - "10:18",
- `"duration"` - "00:00"
"user": "kbrazil",
"tty": "ttys003",
"hostname": "-",
"login": "Thu Feb 27 10:18",
"logout": "10:18",
"duration": "00:00"
},
...
]
@ -130,16 +129,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -23,53 +23,52 @@ available if the timezone field is UTC.
Usage (cli):
$ ls | jc --ls
$ ls | jc --ls
or
or
$ jc ls
$ jc ls
Usage (module):
import jc
result = jc.parse('ls', ls_command_output)
import jc
result = jc.parse('ls', ls_command_output)
or
or
import jc.parsers.ls
result = jc.parsers.ls.parse(ls_command_output)
import jc.parsers.ls
result = jc.parsers.ls.parse(ls_command_output)
Schema:
[
{
"filename": string,
"flags": string,
"links": integer,
"parent": string,
"owner": string,
"group": string,
"size": integer,
"date": string,
"epoch": integer, # [0]
"epoch_utc": integer # [1]
}
]
[
{
"filename": string,
"flags": string,
"links": integer,
"parent": string,
"owner": string,
"group": string,
"size": integer,
"date": string,
"epoch": integer, # [0]
"epoch_utc": integer # [1]
}
]
[0] naive timestamp if date field exists and can be converted.
[1] timezone aware timestamp if date field is in UTC and can
be converted.
**Examples**:
[0] naive timestamp if date field exists and can be converted.
[1] timezone aware timestamp if date field is in UTC and can
be converted.
Examples:
$ ls /usr/bin | jc --ls -p
[
{
- `"filename"` - "apropos"
"filename": "apropos"
},
{
- `"filename"` - "arch"
"filename": "arch"
},
...
]
@ -77,23 +76,23 @@ be converted.
$ ls -l /usr/bin | jc --ls -p
[
{
- `"filename"` - "apropos",
- `"link_to"` - "whatis",
- `"flags"` - "lrwxrwxrwx.",
- `"links"` - 1,
- `"owner"` - "root",
- `"group"` - "root",
- `"size"` - 6,
- `"date"` - "Aug 15 10:53"
"filename": "apropos",
"link_to": "whatis",
"flags": "lrwxrwxrwx.",
"links": 1,
"owner": "root",
"group": "root",
"size": 6,
"date": "Aug 15 10:53"
},
{
- `"filename"` - "ar",
- `"flags"` - "-rwxr-xr-x.",
- `"links"` - 1,
- `"owner"` - "root",
- `"group"` - "root",
- `"size"` - 62744,
- `"date"` - "Aug 8 16:14"
"filename": "ar",
"flags": "-rwxr-xr-x.",
"links": 1,
"owner": "root",
"group": "root",
"size": 62744,
"date": "Aug 8 16:14"
},
...
]
@ -101,23 +100,23 @@ be converted.
$ ls -l /usr/bin | jc --ls -p -r
[
{
- `"filename"` - "apropos",
- `"link_to"` - "whatis",
- `"flags"` - "lrwxrwxrwx.",
- `"links"` - "1",
- `"owner"` - "root",
- `"group"` - "root",
- `"size"` - "6",
- `"date"` - "Aug 15 10:53"
"filename": "apropos",
"link_to": "whatis",
"flags": "lrwxrwxrwx.",
"links": "1",
"owner": "root",
"group": "root",
"size": "6",
"date": "Aug 15 10:53"
},
{
- `"filename"` - "arch",
- `"flags"` - "-rwxr-xr-x.",
- `"links"` - "1",
- `"owner"` - "root",
- `"group"` - "root",
- `"size"` - "33080",
- `"date"` - "Aug 19 23:25"
"filename": "arch",
"flags": "-rwxr-xr-x.",
"links": "1",
"owner": "root",
"group": "root",
"size": "33080",
"date": "Aug 19 23:25"
},
...
]
@ -142,16 +141,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -22,54 +22,53 @@ available if the timezone field is UTC.
Usage (cli):
$ ls | jc --ls-s
$ ls | jc --ls-s
Usage (module):
import jc
# result is an iterable object (generator)
result = jc.parse('ls_s', ls_command_output.splitlines())
for item in result:
# do something
import jc
# result is an iterable object (generator)
result = jc.parse('ls_s', ls_command_output.splitlines())
for item in result:
# do something
or
or
import jc.parsers.ls_s
# result is an iterable object (generator)
result = jc.parsers.ls_s.parse(ls_command_output.splitlines())
for item in result:
# do something
import jc.parsers.ls_s
# result is an iterable object (generator)
result = jc.parsers.ls_s.parse(ls_command_output.splitlines())
for item in result:
# do something
Schema:
{
"filename": string,
"flags": string,
"links": integer,
"parent": string,
"owner": string,
"group": string,
"size": integer,
"date": string,
"epoch": integer, # [0]
"epoch_utc": integer, # [1]
{
"filename": string,
"flags": string,
"links": integer,
"parent": string,
"owner": string,
"group": string,
"size": integer,
"date": string,
"epoch": integer, # [0]
"epoch_utc": integer, # [1]
# Below object only exists if using -qq or ignore_exceptions=True
# Below object only exists if using -qq or ignore_exceptions=True
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
[0] naive timestamp if date field exists and can be converted.
[1] timezone aware timestamp if date field is in UTC and can
be converted
**Examples**:
[0] naive timestamp if date field exists and can be converted.
[1] timezone aware timestamp if date field is in UTC and can
be converted
Examples:
$ ls -l /usr/bin | jc --ls-s
{"filename":"2to3-","flags":"-rwxr-xr-x","links":4,"owner":"root","...}
@ -103,25 +102,20 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False)
Main text parsing generator function. Returns an iterator object.
**Arguments**:
Parameters:
- `data` - (iterable) line-based text data to parse
data: (iterable) line-based text data to parse
(e.g. sys.stdin or str.splitlines())
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
**Yields**:
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
Yields:
Dictionary. Raw or processed structured data.
**Returns**:
Returns:
Iterator object

View File

@ -7,91 +7,90 @@ jc - JSON CLI output utility `lsblk` command output parser
Usage (cli):
$ lsblk | jc --lsblk
$ lsblk | jc --lsblk
or
or
$ jc lsblk
$ jc lsblk
Usage (module):
import jc
result = jc.parse('lsblk', lsblk_command_output)
import jc
result = jc.parse('lsblk', lsblk_command_output)
or
or
import jc.parsers.lsblk
result = jc.parsers.lsblk.parse(lsblk_command_output)
import jc.parsers.lsblk
result = jc.parsers.lsblk.parse(lsblk_command_output)
Schema:
[
{
"name": string,
"maj_min": string,
"rm": boolean,
"size": string,
"ro": boolean,
"type": string,
"mountpoint": string,
"kname": string,
"fstype": string,
"label": string,
"uuid": string,
"partlabel": string,
"partuuid": string,
"ra": integer,
"model": string,
"serial": string,
"state": string,
"owner": string,
"group": string,
"mode": string,
"alignment": integer,
"min_io": integer,
"opt_io": integer,
"phy_sec": integer,
"log_sec": integer,
"rota": boolean,
"sched": string,
"rq_size": integer,
"disc_aln": integer,
"disc_gran": string,
"disc_max": string,
"disc_zero": boolean,
"wsame": string,
"wwn": string,
"rand": boolean,
"pkname": string,
"hctl": string,
"tran": string,
"rev": string,
"vendor": string
}
]
**Examples**:
[
{
"name": string,
"maj_min": string,
"rm": boolean,
"size": string,
"ro": boolean,
"type": string,
"mountpoint": string,
"kname": string,
"fstype": string,
"label": string,
"uuid": string,
"partlabel": string,
"partuuid": string,
"ra": integer,
"model": string,
"serial": string,
"state": string,
"owner": string,
"group": string,
"mode": string,
"alignment": integer,
"min_io": integer,
"opt_io": integer,
"phy_sec": integer,
"log_sec": integer,
"rota": boolean,
"sched": string,
"rq_size": integer,
"disc_aln": integer,
"disc_gran": string,
"disc_max": string,
"disc_zero": boolean,
"wsame": string,
"wwn": string,
"rand": boolean,
"pkname": string,
"hctl": string,
"tran": string,
"rev": string,
"vendor": string
}
]
Examples:
$ lsblk | jc --lsblk -p
[
{
- `"name"` - "sda",
- `"maj_min"` - "8:0",
- `"rm"` - false,
- `"size"` - "20G",
- `"ro"` - false,
- `"type"` - "disk",
- `"mountpoint"` - null
"name": "sda",
"maj_min": "8:0",
"rm": false,
"size": "20G",
"ro": false,
"type": "disk",
"mountpoint": null
},
{
- `"name"` - "sda1",
- `"maj_min"` - "8:1",
- `"rm"` - false,
- `"size"` - "1G",
- `"ro"` - false,
- `"type"` - "part",
- `"mountpoint"` - "/boot"
"name": "sda1",
"maj_min": "8:1",
"rm": false,
"size": "1G",
"ro": false,
"type": "part",
"mountpoint": "/boot"
},
...
]
@ -102,88 +101,88 @@ Schema:
PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p
[
{
- `"name"` - "sda",
- `"maj_min"` - "8:0",
- `"rm"` - false,
- `"size"` - "20G",
- `"ro"` - false,
- `"type"` - "disk",
- `"mountpoint"` - null,
- `"kname"` - "sda",
- `"fstype"` - null,
- `"label"` - null,
- `"uuid"` - null,
- `"partlabel"` - null,
- `"partuuid"` - null,
- `"ra"` - 4096,
- `"model"` - "VMware Virtual S",
- `"serial"` - null,
- `"state"` - "running",
- `"owner"` - "root",
- `"group"` - "disk",
- `"mode"` - "brw-rw----",
- `"alignment"` - 0,
- `"min_io"` - 512,
- `"opt_io"` - 0,
- `"phy_sec"` - 512,
- `"log_sec"` - 512,
- `"rota"` - true,
- `"sched"` - "deadline",
- `"rq_size"` - 128,
- `"disc_aln"` - 0,
- `"disc_gran"` - "0B",
- `"disc_max"` - "0B",
- `"disc_zero"` - false,
- `"wsame"` - "32M",
- `"wwn"` - null,
- `"rand"` - true,
- `"pkname"` - null,
- `"hctl"` - "0:0:0:0",
- `"tran"` - "spi",
- `"rev"` - "1.0",
- `"vendor"` - "VMware,"
"name": "sda",
"maj_min": "8:0",
"rm": false,
"size": "20G",
"ro": false,
"type": "disk",
"mountpoint": null,
"kname": "sda",
"fstype": null,
"label": null,
"uuid": null,
"partlabel": null,
"partuuid": null,
"ra": 4096,
"model": "VMware Virtual S",
"serial": null,
"state": "running",
"owner": "root",
"group": "disk",
"mode": "brw-rw----",
"alignment": 0,
"min_io": 512,
"opt_io": 0,
"phy_sec": 512,
"log_sec": 512,
"rota": true,
"sched": "deadline",
"rq_size": 128,
"disc_aln": 0,
"disc_gran": "0B",
"disc_max": "0B",
"disc_zero": false,
"wsame": "32M",
"wwn": null,
"rand": true,
"pkname": null,
"hctl": "0:0:0:0",
"tran": "spi",
"rev": "1.0",
"vendor": "VMware,"
},
{
- `"name"` - "sda1",
- `"maj_min"` - "8:1",
- `"rm"` - false,
- `"size"` - "1G",
- `"ro"` - false,
- `"type"` - "part",
- `"mountpoint"` - "/boot",
- `"kname"` - "sda1",
- `"fstype"` - "xfs",
- `"label"` - null,
- `"uuid"` - "05d927bb-5875-49e3-ada1-7f46cb31c932",
- `"partlabel"` - null,
- `"partuuid"` - null,
- `"ra"` - 4096,
- `"model"` - null,
- `"serial"` - null,
- `"state"` - null,
- `"owner"` - "root",
- `"group"` - "disk",
- `"mode"` - "brw-rw----",
- `"alignment"` - 0,
- `"min_io"` - 512,
- `"opt_io"` - 0,
- `"phy_sec"` - 512,
- `"log_sec"` - 512,
- `"rota"` - true,
- `"sched"` - "deadline",
- `"rq_size"` - 128,
- `"disc_aln"` - 0,
- `"disc_gran"` - "0B",
- `"disc_max"` - "0B",
- `"disc_zero"` - false,
- `"wsame"` - "32M",
- `"wwn"` - null,
- `"rand"` - true,
- `"pkname"` - "sda",
- `"hctl"` - null,
- `"tran"` - null,
- `"rev"` - null,
- `"vendor"` - null
"name": "sda1",
"maj_min": "8:1",
"rm": false,
"size": "1G",
"ro": false,
"type": "part",
"mountpoint": "/boot",
"kname": "sda1",
"fstype": "xfs",
"label": null,
"uuid": "05d927bb-5875-49e3-ada1-7f46cb31c932",
"partlabel": null,
"partuuid": null,
"ra": 4096,
"model": null,
"serial": null,
"state": null,
"owner": "root",
"group": "disk",
"mode": "brw-rw----",
"alignment": 0,
"min_io": 512,
"opt_io": 0,
"phy_sec": 512,
"log_sec": 512,
"rota": true,
"sched": "deadline",
"rq_size": 128,
"disc_aln": 0,
"disc_gran": "0B",
"disc_max": "0B",
"disc_zero": false,
"wsame": "32M",
"wwn": null,
"rand": true,
"pkname": "sda",
"hctl": null,
"tran": null,
"rev": null,
"vendor": null
},
...
]
@ -194,88 +193,88 @@ Schema:
PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p -r
[
{
- `"name"` - "sda",
- `"maj_min"` - "8:0",
- `"rm"` - "0",
- `"size"` - "20G",
- `"ro"` - "0",
- `"type"` - "disk",
- `"mountpoint"` - null,
- `"kname"` - "sda",
- `"fstype"` - null,
- `"label"` - null,
- `"uuid"` - null,
- `"partlabel"` - null,
- `"partuuid"` - null,
- `"ra"` - "4096",
- `"model"` - "VMware Virtual S",
- `"serial"` - null,
- `"state"` - "running",
- `"owner"` - "root",
- `"group"` - "disk",
- `"mode"` - "brw-rw----",
- `"alignment"` - "0",
- `"min_io"` - "512",
- `"opt_io"` - "0",
- `"phy_sec"` - "512",
- `"log_sec"` - "512",
- `"rota"` - "1",
- `"sched"` - "deadline",
- `"rq_size"` - "128",
- `"disc_aln"` - "0",
- `"disc_gran"` - "0B",
- `"disc_max"` - "0B",
- `"disc_zero"` - "0",
- `"wsame"` - "32M",
- `"wwn"` - null,
- `"rand"` - "1",
- `"pkname"` - null,
- `"hctl"` - "0:0:0:0",
- `"tran"` - "spi",
- `"rev"` - "1.0",
- `"vendor"` - "VMware,"
"name": "sda",
"maj_min": "8:0",
"rm": "0",
"size": "20G",
"ro": "0",
"type": "disk",
"mountpoint": null,
"kname": "sda",
"fstype": null,
"label": null,
"uuid": null,
"partlabel": null,
"partuuid": null,
"ra": "4096",
"model": "VMware Virtual S",
"serial": null,
"state": "running",
"owner": "root",
"group": "disk",
"mode": "brw-rw----",
"alignment": "0",
"min_io": "512",
"opt_io": "0",
"phy_sec": "512",
"log_sec": "512",
"rota": "1",
"sched": "deadline",
"rq_size": "128",
"disc_aln": "0",
"disc_gran": "0B",
"disc_max": "0B",
"disc_zero": "0",
"wsame": "32M",
"wwn": null,
"rand": "1",
"pkname": null,
"hctl": "0:0:0:0",
"tran": "spi",
"rev": "1.0",
"vendor": "VMware,"
},
{
- `"name"` - "sda1",
- `"maj_min"` - "8:1",
- `"rm"` - "0",
- `"size"` - "1G",
- `"ro"` - "0",
- `"type"` - "part",
- `"mountpoint"` - "/boot",
- `"kname"` - "sda1",
- `"fstype"` - "xfs",
- `"label"` - null,
- `"uuid"` - "05d927bb-5875-49e3-ada1-7f46cb31c932",
- `"partlabel"` - null,
- `"partuuid"` - null,
- `"ra"` - "4096",
- `"model"` - null,
- `"serial"` - null,
- `"state"` - null,
- `"owner"` - "root",
- `"group"` - "disk",
- `"mode"` - "brw-rw----",
- `"alignment"` - "0",
- `"min_io"` - "512",
- `"opt_io"` - "0",
- `"phy_sec"` - "512",
- `"log_sec"` - "512",
- `"rota"` - "1",
- `"sched"` - "deadline",
- `"rq_size"` - "128",
- `"disc_aln"` - "0",
- `"disc_gran"` - "0B",
- `"disc_max"` - "0B",
- `"disc_zero"` - "0",
- `"wsame"` - "32M",
- `"wwn"` - null,
- `"rand"` - "1",
- `"pkname"` - "sda",
- `"hctl"` - null,
- `"tran"` - null,
- `"rev"` - null,
- `"vendor"` - null
"name": "sda1",
"maj_min": "8:1",
"rm": "0",
"size": "1G",
"ro": "0",
"type": "part",
"mountpoint": "/boot",
"kname": "sda1",
"fstype": "xfs",
"label": null,
"uuid": "05d927bb-5875-49e3-ada1-7f46cb31c932",
"partlabel": null,
"partuuid": null,
"ra": "4096",
"model": null,
"serial": null,
"state": null,
"owner": "root",
"group": "disk",
"mode": "brw-rw----",
"alignment": "0",
"min_io": "512",
"opt_io": "0",
"phy_sec": "512",
"log_sec": "512",
"rota": "1",
"sched": "deadline",
"rq_size": "128",
"disc_aln": "0",
"disc_gran": "0B",
"disc_max": "0B",
"disc_zero": "0",
"wsame": "32M",
"wwn": null,
"rand": "1",
"pkname": "sda",
"hctl": null,
"tran": null,
"rev": null,
"vendor": null
},
...
]
@ -300,16 +299,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,71 +7,70 @@ jc - JSON CLI output utility `lsmod` command output parser
Usage (cli):
$ lsmod | jc --lsmod
$ lsmod | jc --lsmod
or
or
$ jc lsmod
$ jc lsmod
Usage (module):
import jc
result = jc.parse('lsmod', lsmod_command_output)
import jc
result = jc.parse('lsmod', lsmod_command_output)
or
or
import jc.parsers.lsmod
result = jc.parsers.lsmod.parse(lsmod_command_output)
import jc.parsers.lsmod
result = jc.parsers.lsmod.parse(lsmod_command_output)
Schema:
[
{
"module": string,
"size": integer,
"used": integer,
"by": [
string
]
}
]
**Examples**:
[
{
"module": string,
"size": integer,
"used": integer,
"by": [
string
]
}
]
Examples:
$ lsmod | jc --lsmod -p
[
...
{
- `"module"` - "nf_nat",
- `"size"` - 26583,
- `"used"` - 3,
- `"by"` - [
"module": "nf_nat",
"size": 26583,
"used": 3,
"by": [
"nf_nat_ipv4",
"nf_nat_ipv6",
"nf_nat_masquerade_ipv4"
]
},
{
- `"module"` - "iptable_mangle",
- `"size"` - 12695,
- `"used"` - 1
"module": "iptable_mangle",
"size": 12695,
"used": 1
},
{
- `"module"` - "iptable_security",
- `"size"` - 12705,
- `"used"` - 1
"module": "iptable_security",
"size": 12705,
"used": 1
},
{
- `"module"` - "iptable_raw",
- `"size"` - 12678,
- `"used"` - 1
"module": "iptable_raw",
"size": 12678,
"used": 1
},
{
- `"module"` - "nf_conntrack",
- `"size"` - 139224,
- `"used"` - 7,
- `"by"` - [
"module": "nf_conntrack",
"size": 139224,
"used": 7,
"by": [
"nf_nat",
"nf_nat_ipv4",
"nf_nat_ipv6",
@ -88,10 +87,10 @@ string
[
...
{
- `"module"` - "nf_conntrack",
- `"size"` - "139224",
- `"used"` - "7",
- `"by"` - [
"module": "nf_conntrack",
"size": "139224",
"used": "7",
"by": [
"nf_nat",
"nf_nat_ipv4",
"nf_nat_ipv6",
@ -102,28 +101,28 @@ string
]
},
{
- `"module"` - "ip_set",
- `"size"` - "45799",
- `"used"` - "0"
"module": "ip_set",
"size": "45799",
"used": "0"
},
{
- `"module"` - "nfnetlink",
- `"size"` - "14519",
- `"used"` - "1",
- `"by"` - [
"module": "nfnetlink",
"size": "14519",
"used": "1",
"by": [
"ip_set"
]
},
{
- `"module"` - "ebtable_filter",
- `"size"` - "12827",
- `"used"` - "1"
"module": "ebtable_filter",
"size": "12827",
"used": "1"
},
{
- `"module"` - "ebtables",
- `"size"` - "35009",
- `"used"` - "2",
- `"by"` - [
"module": "ebtables",
"size": "35009",
"used": "2",
"by": [
"ebtable_nat",
"ebtable_filter"
]
@ -151,16 +150,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,79 +7,78 @@ jc - JSON CLI output utility `lsof` command output parser
Usage (cli):
$ lsof | jc --lsof
$ lsof | jc --lsof
or
or
$ jc lsof
$ jc lsof
Usage (module):
import jc
result = jc.parse('lsof', lsof_command_output)
import jc
result = jc.parse('lsof', lsof_command_output)
or
or
import jc.parsers.lsof
result = jc.parsers.lsof.parse(lsof_command_output)
import jc.parsers.lsof
result = jc.parsers.lsof.parse(lsof_command_output)
Schema:
[
{
"command": string,
"pid": integer,
"tid": integer,
"user": string,
"fd": string,
"type": string,
"device": string,
"size_off": integer,
"node": integer,
"name": string
}
]
**Examples**:
[
{
"command": string,
"pid": integer,
"tid": integer,
"user": string,
"fd": string,
"type": string,
"device": string,
"size_off": integer,
"node": integer,
"name": string
}
]
Examples:
$ sudo lsof | jc --lsof -p
[
{
- `"command"` - "systemd",
- `"pid"` - 1,
- `"tid"` - null,
- `"user"` - "root",
- `"fd"` - "cwd",
- `"type"` - "DIR",
- `"device"` - "253,0",
- `"size_off"` - 224,
- `"node"` - 64,
- `"name"` - "/"
"command": "systemd",
"pid": 1,
"tid": null,
"user": "root",
"fd": "cwd",
"type": "DIR",
"device": "253,0",
"size_off": 224,
"node": 64,
"name": "/"
},
{
- `"command"` - "systemd",
- `"pid"` - 1,
- `"tid"` - null,
- `"user"` - "root",
- `"fd"` - "rtd",
- `"type"` - "DIR",
- `"device"` - "253,0",
- `"size_off"` - 224,
- `"node"` - 64,
- `"name"` - "/"
"command": "systemd",
"pid": 1,
"tid": null,
"user": "root",
"fd": "rtd",
"type": "DIR",
"device": "253,0",
"size_off": 224,
"node": 64,
"name": "/"
},
{
- `"command"` - "systemd",
- `"pid"` - 1,
- `"tid"` - null,
- `"user"` - "root",
- `"fd"` - "txt",
- `"type"` - "REG",
- `"device"` - "253,0",
- `"size_off"` - 1624520,
- `"node"` - 50360451,
- `"name"` - "/usr/lib/systemd/systemd"
"command": "systemd",
"pid": 1,
"tid": null,
"user": "root",
"fd": "txt",
"type": "REG",
"device": "253,0",
"size_off": 1624520,
"node": 50360451,
"name": "/usr/lib/systemd/systemd"
},
...
]
@ -87,40 +86,40 @@ Schema:
$ sudo lsof | jc --lsof -p -r
[
{
- `"command"` - "systemd",
- `"pid"` - "1",
- `"tid"` - null,
- `"user"` - "root",
- `"fd"` - "cwd",
- `"type"` - "DIR",
- `"device"` - "8,2",
- `"size_off"` - "4096",
- `"node"` - "2",
- `"name"` - "/"
"command": "systemd",
"pid": "1",
"tid": null,
"user": "root",
"fd": "cwd",
"type": "DIR",
"device": "8,2",
"size_off": "4096",
"node": "2",
"name": "/"
},
{
- `"command"` - "systemd",
- `"pid"` - "1",
- `"tid"` - null,
- `"user"` - "root",
- `"fd"` - "rtd",
- `"type"` - "DIR",
- `"device"` - "8,2",
- `"size_off"` - "4096",
- `"node"` - "2",
- `"name"` - "/"
"command": "systemd",
"pid": "1",
"tid": null,
"user": "root",
"fd": "rtd",
"type": "DIR",
"device": "8,2",
"size_off": "4096",
"node": "2",
"name": "/"
},
{
- `"command"` - "systemd",
- `"pid"` - "1",
- `"tid"` - null,
- `"user"` - "root",
- `"fd"` - "txt",
- `"type"` - "REG",
- `"device"` - "8,2",
- `"size_off"` - "1595792",
- `"node"` - "668802",
- `"name"` - "/lib/systemd/systemd"
"command": "systemd",
"pid": "1",
"tid": null,
"user": "root",
"fd": "txt",
"type": "REG",
"device": "8,2",
"size_off": "1595792",
"node": "668802",
"name": "/lib/systemd/systemd"
},
...
]
@ -145,16 +144,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -9,218 +9,217 @@ Supports the `-v` option or no options.
Usage (cli):
$ lsusb -v | jc --lsusb
$ lsusb -v | jc --lsusb
or
or
$ jc lsusb -v
$ jc lsusb -v
Usage (module):
import jc
result = jc.parse('lsusb', lsusb_command_output)
import jc
result = jc.parse('lsusb', lsusb_command_output)
or
or
import jc.parsers.lsusb
result = jc.parsers.lsusb.parse(lsusb_command_output)
import jc.parsers.lsusb
result = jc.parsers.lsusb.parse(lsusb_command_output)
Schema:
Note: <item> object keynames are assigned directly from the lsusb
output. If there are duplicate <item> names in a section, only the
last one is converted.
Note: <item> object keynames are assigned directly from the lsusb
output. If there are duplicate <item> names in a section, only the
last one is converted.
[
{
"bus": string,
"device": string,
"id": string,
"description": string,
"device_descriptor": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
},
"configuration_descriptor": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
},
"interface_association": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"interface_descriptors": [
{
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
},
"cdc_header": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"cdc_call_management": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"cdc_acm": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"cdc_union": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"endpoint_descriptors": [
{
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
}
]
}
]
}
},
"hub_descriptor": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string,
]
},
"hub_port_status": {
"<item>": {
"value": string,
"attributes": [
string
]
}
}
},
"device_status": {
"value": string,
"description": string
}
}
]
**Examples**:
[
{
"bus": string,
"device": string,
"id": string,
"description": string,
"device_descriptor": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
},
"configuration_descriptor": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
},
"interface_association": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"interface_descriptors": [
{
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
},
"cdc_header": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"cdc_call_management": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"cdc_acm": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"cdc_union": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
},
"endpoint_descriptors": [
{
"<item>": {
"value": string,
"description": string,
"attributes": [
string
]
}
}
]
}
]
}
},
"hub_descriptor": {
"<item>": {
"value": string,
"description": string,
"attributes": [
string,
]
},
"hub_port_status": {
"<item>": {
"value": string,
"attributes": [
string
]
}
}
},
"device_status": {
"value": string,
"description": string
}
}
]
Examples:
$ lsusb -v | jc --lsusb -p
[
{
- `"bus"` - "002",
- `"device"` - "001",
- `"id"` - "1d6b:0001",
- `"description"` - "Linux Foundation 1.1 root hub",
- `"device_descriptor"` - {
- `"bLength"` - {
- `"value"` - "18"
"bus": "002",
"device": "001",
"id": "1d6b:0001",
"description": "Linux Foundation 1.1 root hub",
"device_descriptor": {
"bLength": {
"value": "18"
},
- `"bDescriptorType"` - {
- `"value"` - "1"
"bDescriptorType": {
"value": "1"
},
- `"bcdUSB"` - {
- `"value"` - "1.10"
"bcdUSB": {
"value": "1.10"
},
...
- `"bNumConfigurations"` - {
- `"value"` - "1"
"bNumConfigurations": {
"value": "1"
},
- `"configuration_descriptor"` - {
- `"bLength"` - {
- `"value"` - "9"
"configuration_descriptor": {
"bLength": {
"value": "9"
},
...
- `"iConfiguration"` - {
- `"value"` - "0"
"iConfiguration": {
"value": "0"
},
- `"bmAttributes"` - {
- `"value"` - "0xe0",
- `"attributes"` - [
"bmAttributes": {
"value": "0xe0",
"attributes": [
"Self Powered",
"Remote Wakeup"
]
},
- `"MaxPower"` - {
- `"description"` - "0mA"
"MaxPower": {
"description": "0mA"
},
- `"interface_descriptors"` - [
"interface_descriptors": [
{
- `"bLength"` - {
- `"value"` - "9"
"bLength": {
"value": "9"
},
...
- `"bInterfaceProtocol"` - {
- `"value"` - "0",
- `"description"` - "Full speed (or root) hub"
"bInterfaceProtocol": {
"value": "0",
"description": "Full speed (or root) hub"
},
- `"iInterface"` - {
- `"value"` - "0"
"iInterface": {
"value": "0"
},
- `"endpoint_descriptors"` - [
"endpoint_descriptors": [
{
- `"bLength"` - {
- `"value"` - "7"
"bLength": {
"value": "7"
},
...
- `"bmAttributes"` - {
- `"value"` - "3",
- `"attributes"` - [
"bmAttributes": {
"value": "3",
"attributes": [
"Transfer Type Interrupt",
"Synch Type None",
"Usage Type Data"
]
},
- `"wMaxPacketSize"` - {
- `"value"` - "0x0002",
- `"description"` - "1x 2 bytes"
"wMaxPacketSize": {
"value": "0x0002",
"description": "1x 2 bytes"
},
- `"bInterval"` - {
- `"value"` - "255"
"bInterval": {
"value": "255"
}
}
]
@ -228,31 +227,31 @@ string
]
}
},
- `"hub_descriptor"` - {
- `"bLength"` - {
- `"value"` - "9"
"hub_descriptor": {
"bLength": {
"value": "9"
},
...
- `"wHubCharacteristic"` - {
- `"value"` - "0x000a",
- `"attributes"` - [
"wHubCharacteristic": {
"value": "0x000a",
"attributes": [
"No power switching (usb 1.0)",
"Per-port overcurrent protection"
]
},
...
- `"hub_port_status"` - {
"hub_port_status": {
"Port 1": {
- `"value"` - "0000.0103",
- `"attributes"` - [
"value": "0000.0103",
"attributes": [
"power",
"enable",
"connect"
]
},
"Port 2": {
- `"value"` - "0000.0103",
- `"attributes"` - [
"value": "0000.0103",
"attributes": [
"power",
"enable",
"connect"
@ -260,9 +259,9 @@ string
}
}
},
- `"device_status"` - {
- `"value"` - "0x0001",
- `"description"` - "Self Powered"
"device_status": {
"value": "0x0001",
"description": "Self Powered"
}
}
]
@ -287,16 +286,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,45 +7,44 @@ jc - JSON CLI output utility `mount` command output parser
Usage (cli):
$ mount | jc --mount
$ mount | jc --mount
or
or
$ jc mount
$ jc mount
Usage (module):
import jc
result = jc.parse('mount', mount_command_output)
import jc
result = jc.parse('mount', mount_command_output)
or
or
import jc.parsers.mount
result = jc.parsers.mount.parse(mount_command_output)
import jc.parsers.mount
result = jc.parsers.mount.parse(mount_command_output)
Schema:
[
{
"filesystem": string,
"mount_point": string,
"type": string,
"access": [
string
]
}
]
**Example**:
[
{
"filesystem": string,
"mount_point": string,
"type": string,
"access": [
string
]
}
]
Example:
$ mount | jc --mount -p
[
{
- `"filesystem"` - "sysfs",
- `"mount_point"` - "/sys",
- `"type"` - "sysfs",
- `"access"` - [
"filesystem": "sysfs",
"mount_point": "/sys",
"type": "sysfs",
"access": [
"rw",
"nosuid",
"nodev",
@ -54,10 +53,10 @@ string
]
},
{
- `"filesystem"` - "proc",
- `"mount_point"` - "/proc",
- `"type"` - "proc",
- `"access"` - [
"filesystem": "proc",
"mount_point": "/proc",
"type": "proc",
"access": [
"rw",
"nosuid",
"nodev",
@ -66,10 +65,10 @@ string
]
},
{
- `"filesystem"` - "udev",
- `"mount_point"` - "/dev",
- `"type"` - "devtmpfs",
- `"access"` - [
"filesystem": "udev",
"mount_point": "/dev",
"type": "devtmpfs",
"access": [
"rw",
"nosuid",
"relatime",
@ -101,16 +100,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -8,276 +8,275 @@ jc - JSON CLI output utility `netstat` command output parser
Caveats:
- Use of multiple `l` options is not supported on OSX (e.g. `netstat -rlll`)
- Use of the `A` option is not supported on OSX when using the `r` option
(e.g. `netstat -rA`)
(e.g. `netstat -rA`)
Usage (cli):
$ netstat | jc --netstat
$ netstat | jc --netstat
or
or
$ jc netstat
$ jc netstat
Usage (module):
import jc
result = jc.parse('netstat', netstat_command_output)
import jc
result = jc.parse('netstat', netstat_command_output)
or
or
import jc.parsers.netstat
result = jc.parsers.netstat.parse(netstat_command_output)
import jc.parsers.netstat
result = jc.parsers.netstat.parse(netstat_command_output)
Schema:
[
{
"proto": string,
"recv_q": integer,
"send_q": integer,
"transport_protocol" string,
"network_protocol": string,
"local_address": string,
"local_port": string,
"local_port_num": integer,
"foreign_address": string,
"foreign_port": string,
"foreign_port_num": integer,
"state": string,
"program_name": string,
"pid": integer,
"user": string,
"security_context": string,
"refcnt": integer,
"flags": string,
"type": string,
"inode": integer,
"path": string,
"kind": string,
"address": string,
"unix_inode": string,
"conn": string,
"refs": string,
"nextref": string,
"name": string,
"unit": integer,
"vendor": integer,
"class": integer,
"subcla": integer,
"unix_flags": integer,
"pcbcount": integer,
"rcvbuf": integer,
"sndbuf": integer,
"rxbytes": integer,
"txbytes": integer,
"destination": string,
"gateway": string,
"route_flags": string,
"route_flags_pretty": [
string,
]
"route_refs": integer,
"use": integer,
"mtu": integer,
"expire": string,
"genmask": string,
"mss": integer,
"window": integer,
"irtt": integer,
"iface": string,
"metric": integer,
"network": string,
"address": string,
"ipkts": integer, # - = null
"ierrs": integer, # - = null
"idrop": integer, # - = null
"opkts": integer, # - = null
"oerrs": integer, # - = null
"coll": integer, # - = null
"rx_ok": integer,
"rx_err": integer,
"rx_drp": integer,
"rx_ovr": integer,
"tx_ok": integer,
"tx_err": integer,
"tx_drp": integer,
"tx_ovr": integer,
"flg": string,
"ibytes": integer,
"obytes": integer,
"r_mbuf": integer,
"s_mbuf": integer,
"r_clus": integer,
"s_clus": integer,
"r_hiwa": integer,
"s_hiwa": integer,
"r_lowa": integer,
"s_lowa": integer,
"r_bcnt": integer,
"s_bcnt": integer,
"r_bmax": integer,
"s_bmax": integer,
"rexmit": integer,
"ooorcv": integer,
"0_win": integer,
"rexmt": float,
"persist": float,
"keep": float,
"2msl": float,
"delack": float,
"rcvtime": float,
}
]
**Examples**:
[
{
"proto": string,
"recv_q": integer,
"send_q": integer,
"transport_protocol" string,
"network_protocol": string,
"local_address": string,
"local_port": string,
"local_port_num": integer,
"foreign_address": string,
"foreign_port": string,
"foreign_port_num": integer,
"state": string,
"program_name": string,
"pid": integer,
"user": string,
"security_context": string,
"refcnt": integer,
"flags": string,
"type": string,
"inode": integer,
"path": string,
"kind": string,
"address": string,
"unix_inode": string,
"conn": string,
"refs": string,
"nextref": string,
"name": string,
"unit": integer,
"vendor": integer,
"class": integer,
"subcla": integer,
"unix_flags": integer,
"pcbcount": integer,
"rcvbuf": integer,
"sndbuf": integer,
"rxbytes": integer,
"txbytes": integer,
"destination": string,
"gateway": string,
"route_flags": string,
"route_flags_pretty": [
string,
]
"route_refs": integer,
"use": integer,
"mtu": integer,
"expire": string,
"genmask": string,
"mss": integer,
"window": integer,
"irtt": integer,
"iface": string,
"metric": integer,
"network": string,
"address": string,
"ipkts": integer, # - = null
"ierrs": integer, # - = null
"idrop": integer, # - = null
"opkts": integer, # - = null
"oerrs": integer, # - = null
"coll": integer, # - = null
"rx_ok": integer,
"rx_err": integer,
"rx_drp": integer,
"rx_ovr": integer,
"tx_ok": integer,
"tx_err": integer,
"tx_drp": integer,
"tx_ovr": integer,
"flg": string,
"ibytes": integer,
"obytes": integer,
"r_mbuf": integer,
"s_mbuf": integer,
"r_clus": integer,
"s_clus": integer,
"r_hiwa": integer,
"s_hiwa": integer,
"r_lowa": integer,
"s_lowa": integer,
"r_bcnt": integer,
"s_bcnt": integer,
"r_bmax": integer,
"s_bmax": integer,
"rexmit": integer,
"ooorcv": integer,
"0_win": integer,
"rexmt": float,
"persist": float,
"keep": float,
"2msl": float,
"delack": float,
"rcvtime": float,
}
]
Examples:
# netstat -apee | jc --netstat -p
[
{
- `"proto"` - "tcp",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "localhost",
- `"foreign_address"` - "0.0.0.0",
- `"state"` - "LISTEN",
- `"user"` - "systemd-resolve",
- `"inode"` - 26958,
- `"program_name"` - "systemd-resolve",
- `"kind"` - "network",
- `"pid"` - 887,
- `"local_port"` - "domain",
- `"foreign_port"` - "*",
- `"transport_protocol"` - "tcp",
- `"network_protocol"` - "ipv4"
"proto": "tcp",
"recv_q": 0,
"send_q": 0,
"local_address": "localhost",
"foreign_address": "0.0.0.0",
"state": "LISTEN",
"user": "systemd-resolve",
"inode": 26958,
"program_name": "systemd-resolve",
"kind": "network",
"pid": 887,
"local_port": "domain",
"foreign_port": "*",
"transport_protocol": "tcp",
"network_protocol": "ipv4"
},
{
- `"proto"` - "tcp",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "0.0.0.0",
- `"foreign_address"` - "0.0.0.0",
- `"state"` - "LISTEN",
- `"user"` - "root",
- `"inode"` - 30499,
- `"program_name"` - "sshd",
- `"kind"` - "network",
- `"pid"` - 1186,
- `"local_port"` - "ssh",
- `"foreign_port"` - "*",
- `"transport_protocol"` - "tcp",
- `"network_protocol"` - "ipv4"
"proto": "tcp",
"recv_q": 0,
"send_q": 0,
"local_address": "0.0.0.0",
"foreign_address": "0.0.0.0",
"state": "LISTEN",
"user": "root",
"inode": 30499,
"program_name": "sshd",
"kind": "network",
"pid": 1186,
"local_port": "ssh",
"foreign_port": "*",
"transport_protocol": "tcp",
"network_protocol": "ipv4"
},
{
- `"proto"` - "tcp",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "localhost",
- `"foreign_address"` - "localhost",
- `"state"` - "ESTABLISHED",
- `"user"` - "root",
- `"inode"` - 46829,
- `"program_name"` - "sshd: root",
- `"kind"` - "network",
- `"pid"` - 2242,
- `"local_port"` - "ssh",
- `"foreign_port"` - "52186",
- `"transport_protocol"` - "tcp",
- `"network_protocol"` - "ipv4",
- `"foreign_port_num"` - 52186
"proto": "tcp",
"recv_q": 0,
"send_q": 0,
"local_address": "localhost",
"foreign_address": "localhost",
"state": "ESTABLISHED",
"user": "root",
"inode": 46829,
"program_name": "sshd: root",
"kind": "network",
"pid": 2242,
"local_port": "ssh",
"foreign_port": "52186",
"transport_protocol": "tcp",
"network_protocol": "ipv4",
"foreign_port_num": 52186
},
{
- `"proto"` - "tcp",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "localhost",
- `"foreign_address"` - "localhost",
- `"state"` - "ESTABLISHED",
- `"user"` - "root",
- `"inode"` - 46828,
- `"program_name"` - "ssh",
- `"kind"` - "network",
- `"pid"` - 2241,
- `"local_port"` - "52186",
- `"foreign_port"` - "ssh",
- `"transport_protocol"` - "tcp",
- `"network_protocol"` - "ipv4",
- `"local_port_num"` - 52186
"proto": "tcp",
"recv_q": 0,
"send_q": 0,
"local_address": "localhost",
"foreign_address": "localhost",
"state": "ESTABLISHED",
"user": "root",
"inode": 46828,
"program_name": "ssh",
"kind": "network",
"pid": 2241,
"local_port": "52186",
"foreign_port": "ssh",
"transport_protocol": "tcp",
"network_protocol": "ipv4",
"local_port_num": 52186
},
{
- `"proto"` - "tcp6",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "[::]",
- `"foreign_address"` - "[::]",
- `"state"` - "LISTEN",
- `"user"` - "root",
- `"inode"` - 30510,
- `"program_name"` - "sshd",
- `"kind"` - "network",
- `"pid"` - 1186,
- `"local_port"` - "ssh",
- `"foreign_port"` - "*",
- `"transport_protocol"` - "tcp",
- `"network_protocol"` - "ipv6"
"proto": "tcp6",
"recv_q": 0,
"send_q": 0,
"local_address": "[::]",
"foreign_address": "[::]",
"state": "LISTEN",
"user": "root",
"inode": 30510,
"program_name": "sshd",
"kind": "network",
"pid": 1186,
"local_port": "ssh",
"foreign_port": "*",
"transport_protocol": "tcp",
"network_protocol": "ipv6"
},
{
- `"proto"` - "udp",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "localhost",
- `"foreign_address"` - "0.0.0.0",
- `"state"` - null,
- `"user"` - "systemd-resolve",
- `"inode"` - 26957,
- `"program_name"` - "systemd-resolve",
- `"kind"` - "network",
- `"pid"` - 887,
- `"local_port"` - "domain",
- `"foreign_port"` - "*",
- `"transport_protocol"` - "udp",
- `"network_protocol"` - "ipv4"
"proto": "udp",
"recv_q": 0,
"send_q": 0,
"local_address": "localhost",
"foreign_address": "0.0.0.0",
"state": null,
"user": "systemd-resolve",
"inode": 26957,
"program_name": "systemd-resolve",
"kind": "network",
"pid": 887,
"local_port": "domain",
"foreign_port": "*",
"transport_protocol": "udp",
"network_protocol": "ipv4"
},
{
- `"proto"` - "raw6",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "[::]",
- `"foreign_address"` - "[::]",
- `"state"` - "7",
- `"user"` - "systemd-network",
- `"inode"` - 27001,
- `"program_name"` - "systemd-network",
- `"kind"` - "network",
- `"pid"` - 867,
- `"local_port"` - "ipv6-icmp",
- `"foreign_port"` - "*",
- `"transport_protocol"` - null,
- `"network_protocol"` - "ipv6"
"proto": "raw6",
"recv_q": 0,
"send_q": 0,
"local_address": "[::]",
"foreign_address": "[::]",
"state": "7",
"user": "systemd-network",
"inode": 27001,
"program_name": "systemd-network",
"kind": "network",
"pid": 867,
"local_port": "ipv6-icmp",
"foreign_port": "*",
"transport_protocol": null,
"network_protocol": "ipv6"
},
{
- `"proto"` - "unix",
- `"refcnt"` - 2,
- `"flags"` - null,
- `"type"` - "DGRAM",
- `"state"` - null,
- `"inode"` - 33322,
- `"program_name"` - "systemd",
- `"path"` - "/run/user/1000/systemd/notify",
- `"kind"` - "socket",
- `"pid"` - 1607
"proto": "unix",
"refcnt": 2,
"flags": null,
"type": "DGRAM",
"state": null,
"inode": 33322,
"program_name": "systemd",
"path": "/run/user/1000/systemd/notify",
"kind": "socket",
"pid": 1607
},
{
- `"proto"` - "unix",
- `"refcnt"` - 2,
- `"flags"` - "ACC",
- `"type"` - "SEQPACKET",
- `"state"` - "LISTENING",
- `"inode"` - 20835,
- `"program_name"` - "init",
- `"path"` - "/run/udev/control",
- `"kind"` - "socket",
- `"pid"` - 1
"proto": "unix",
"refcnt": 2,
"flags": "ACC",
"type": "SEQPACKET",
"state": "LISTENING",
"inode": 20835,
"program_name": "init",
"path": "/run/udev/control",
"kind": "socket",
"pid": 1
},
...
]
@ -285,45 +284,45 @@ string,
$ netstat -r | jc --netstat -p
[
{
- `"destination"` - "default",
- `"gateway"` - "gateway",
- `"genmask"` - "0.0.0.0",
- `"route_flags"` - "UG",
- `"mss"` - 0,
- `"window"` - 0,
- `"irtt"` - 0,
- `"iface"` - "ens33",
- `"kind"` - "route",
- `"route_flags_pretty"` - [
"destination": "default",
"gateway": "gateway",
"genmask": "0.0.0.0",
"route_flags": "UG",
"mss": 0,
"window": 0,
"irtt": 0,
"iface": "ens33",
"kind": "route",
"route_flags_pretty": [
"UP",
"GATEWAY"
]
},
{
- `"destination"` - "172.17.0.0",
- `"gateway"` - "0.0.0.0",
- `"genmask"` - "255.255.0.0",
- `"route_flags"` - "U",
- `"mss"` - 0,
- `"window"` - 0,
- `"irtt"` - 0,
- `"iface"` - "docker0",
- `"kind"` - "route",
- `"route_flags_pretty"` - [
"destination": "172.17.0.0",
"gateway": "0.0.0.0",
"genmask": "255.255.0.0",
"route_flags": "U",
"mss": 0,
"window": 0,
"irtt": 0,
"iface": "docker0",
"kind": "route",
"route_flags_pretty": [
"UP"
]
},
{
- `"destination"` - "192.168.71.0",
- `"gateway"` - "0.0.0.0",
- `"genmask"` - "255.255.255.0",
- `"route_flags"` - "U",
- `"mss"` - 0,
- `"window"` - 0,
- `"irtt"` - 0,
- `"iface"` - "ens33",
- `"kind"` - "route",
- `"route_flags_pretty"` - [
"destination": "192.168.71.0",
"gateway": "0.0.0.0",
"genmask": "255.255.255.0",
"route_flags": "U",
"mss": 0,
"window": 0,
"irtt": 0,
"iface": "ens33",
"kind": "route",
"route_flags_pretty": [
"UP"
]
}
@ -332,32 +331,32 @@ string,
$ netstat -i | jc --netstat -p
[
{
- `"iface"` - "ens33",
- `"mtu"` - 1500,
- `"rx_ok"` - 476,
- `"rx_err"` - 0,
- `"rx_drp"` - 0,
- `"rx_ovr"` - 0,
- `"tx_ok"` - 312,
- `"tx_err"` - 0,
- `"tx_drp"` - 0,
- `"tx_ovr"` - 0,
- `"flg"` - "BMRU",
- `"kind"` - "interface"
"iface": "ens33",
"mtu": 1500,
"rx_ok": 476,
"rx_err": 0,
"rx_drp": 0,
"rx_ovr": 0,
"tx_ok": 312,
"tx_err": 0,
"tx_drp": 0,
"tx_ovr": 0,
"flg": "BMRU",
"kind": "interface"
},
{
- `"iface"` - "lo",
- `"mtu"` - 65536,
- `"rx_ok"` - 0,
- `"rx_err"` - 0,
- `"rx_drp"` - 0,
- `"rx_ovr"` - 0,
- `"tx_ok"` - 0,
- `"tx_err"` - 0,
- `"tx_drp"` - 0,
- `"tx_ovr"` - 0,
- `"flg"` - "LRU",
- `"kind"` - "interface"
"iface": "lo",
"mtu": 65536,
"rx_ok": 0,
"rx_err": 0,
"rx_drp": 0,
"rx_ovr": 0,
"tx_ok": 0,
"tx_err": 0,
"tx_drp": 0,
"tx_ovr": 0,
"flg": "LRU",
"kind": "interface"
}
]
@ -381,16 +380,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,208 +7,207 @@ jc - JSON CLI output utility `ntpq -p` command output parser
Usage (cli):
$ ntpq -p | jc --ntpq
$ ntpq -p | jc --ntpq
or
or
$ jc ntpq -p
$ jc ntpq -p
Usage (module):
import jc
result = jc.parse('ntpq', ntpq_command_output)
import jc
result = jc.parse('ntpq', ntpq_command_output)
or
or
import jc.parsers.ntpq
result = jc.parsers.ntpq.parse(ntpq_command_output)
import jc.parsers.ntpq
result = jc.parsers.ntpq.parse(ntpq_command_output)
Schema:
[
{
"state": string, # space/~ converted to null
"remote": string,
"refid": string,
"st": integer,
"t": string,
"when": integer, # - converted to null
"poll": integer,
"reach": integer,
"delay": float,
"offset": float,
"jitter": float
},
]
**Examples**:
[
{
"state": string, # space/~ converted to null
"remote": string,
"refid": string,
"st": integer,
"t": string,
"when": integer, # - converted to null
"poll": integer,
"reach": integer,
"delay": float,
"offset": float,
"jitter": float
},
]
Examples:
$ ntpq -p | jc --ntpq -p
[
{
- `"remote"` - "44.190.6.254",
- `"refid"` - "127.67.113.92",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - 1,
- `"poll"` - 64,
- `"reach"` - 1,
- `"delay"` - 23.399,
- `"offset"` - -2.805,
- `"jitter"` - 2.131,
- `"state"` - null
"remote": "44.190.6.254",
"refid": "127.67.113.92",
"st": 2,
"t": "u",
"when": 1,
"poll": 64,
"reach": 1,
"delay": 23.399,
"offset": -2.805,
"jitter": 2.131,
"state": null
},
{
- `"remote"` - "ntp.wdc1.us.lea",
- `"refid"` - "130.133.1.10",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - null,
- `"poll"` - 64,
- `"reach"` - 1,
- `"delay"` - 93.053,
- `"offset"` - -0.807,
- `"jitter"` - 2.839,
- `"state"` - null
"remote": "ntp.wdc1.us.lea",
"refid": "130.133.1.10",
"st": 2,
"t": "u",
"when": null,
"poll": 64,
"reach": 1,
"delay": 93.053,
"offset": -0.807,
"jitter": 2.839,
"state": null
},
{
- `"remote"` - "clock.team-cymr",
- `"refid"` - "204.9.54.119",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - null,
- `"poll"` - 64,
- `"reach"` - 1,
- `"delay"` - 70.337,
- `"offset"` - -2.909,
- `"jitter"` - 2.6,
- `"state"` - null
"remote": "clock.team-cymr",
"refid": "204.9.54.119",
"st": 2,
"t": "u",
"when": null,
"poll": 64,
"reach": 1,
"delay": 70.337,
"offset": -2.909,
"jitter": 2.6,
"state": null
},
{
- `"remote"` - "mirror1.sjc02.s",
- `"refid"` - "216.218.254.202",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - 2,
- `"poll"` - 64,
- `"reach"` - 1,
- `"delay"` - 29.325,
- `"offset"` - 1.044,
- `"jitter"` - 4.069,
- `"state"` - null,
"remote": "mirror1.sjc02.s",
"refid": "216.218.254.202",
"st": 2,
"t": "u",
"when": 2,
"poll": 64,
"reach": 1,
"delay": 29.325,
"offset": 1.044,
"jitter": 4.069,
"state": null,
}
]
$ ntpq -pn| jc --ntpq -p
[
{
- `"remote"` - "44.190.6.254",
- `"refid"` - "127.67.113.92",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - 66,
- `"poll"` - 64,
- `"reach"` - 377,
- `"delay"` - 22.69,
- `"offset"` - -0.392,
- `"jitter"` - 2.085,
- `"state"` - "+"
"remote": "44.190.6.254",
"refid": "127.67.113.92",
"st": 2,
"t": "u",
"when": 66,
"poll": 64,
"reach": 377,
"delay": 22.69,
"offset": -0.392,
"jitter": 2.085,
"state": "+"
},
{
- `"remote"` - "108.59.2.24",
- `"refid"` - "130.133.1.10",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - 63,
- `"poll"` - 64,
- `"reach"` - 377,
- `"delay"` - 90.805,
- `"offset"` - 2.84,
- `"jitter"` - 1.908,
- `"state"` - "-"
"remote": "108.59.2.24",
"refid": "130.133.1.10",
"st": 2,
"t": "u",
"when": 63,
"poll": 64,
"reach": 377,
"delay": 90.805,
"offset": 2.84,
"jitter": 1.908,
"state": "-"
},
{
- `"remote"` - "38.229.71.1",
- `"refid"` - "204.9.54.119",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - 64,
- `"poll"` - 64,
- `"reach"` - 377,
- `"delay"` - 68.699,
- `"offset"` - -0.61,
- `"jitter"` - 2.576,
- `"state"` - "+"
"remote": "38.229.71.1",
"refid": "204.9.54.119",
"st": 2,
"t": "u",
"when": 64,
"poll": 64,
"reach": 377,
"delay": 68.699,
"offset": -0.61,
"jitter": 2.576,
"state": "+"
},
{
- `"remote"` - "72.5.72.15",
- `"refid"` - "216.218.254.202",
- `"st"` - 2,
- `"t"` - "u",
- `"when"` - 63,
- `"poll"` - 64,
- `"reach"` - 377,
- `"delay"` - 22.654,
- `"offset"` - 0.231,
- `"jitter"` - 1.964,
- `"state"` - "*"
"remote": "72.5.72.15",
"refid": "216.218.254.202",
"st": 2,
"t": "u",
"when": 63,
"poll": 64,
"reach": 377,
"delay": 22.654,
"offset": 0.231,
"jitter": 1.964,
"state": "*"
}
]
$ ntpq -pn| jc --ntpq -p -r
[
{
- `"s"` - "+",
- `"remote"` - "44.190.6.254",
- `"refid"` - "127.67.113.92",
- `"st"` - "2",
- `"t"` - "u",
- `"when"` - "66",
- `"poll"` - "64",
- `"reach"` - "377",
- `"delay"` - "22.690",
- `"offset"` - "-0.392",
- `"jitter"` - "2.085"
"s": "+",
"remote": "44.190.6.254",
"refid": "127.67.113.92",
"st": "2",
"t": "u",
"when": "66",
"poll": "64",
"reach": "377",
"delay": "22.690",
"offset": "-0.392",
"jitter": "2.085"
},
{
- `"s"` - "-",
- `"remote"` - "108.59.2.24",
- `"refid"` - "130.133.1.10",
- `"st"` - "2",
- `"t"` - "u",
- `"when"` - "63",
- `"poll"` - "64",
- `"reach"` - "377",
- `"delay"` - "90.805",
- `"offset"` - "2.840",
- `"jitter"` - "1.908"
"s": "-",
"remote": "108.59.2.24",
"refid": "130.133.1.10",
"st": "2",
"t": "u",
"when": "63",
"poll": "64",
"reach": "377",
"delay": "90.805",
"offset": "2.840",
"jitter": "1.908"
},
{
- `"s"` - "+",
- `"remote"` - "38.229.71.1",
- `"refid"` - "204.9.54.119",
- `"st"` - "2",
- `"t"` - "u",
- `"when"` - "64",
- `"poll"` - "64",
- `"reach"` - "377",
- `"delay"` - "68.699",
- `"offset"` - "-0.610",
- `"jitter"` - "2.576"
"s": "+",
"remote": "38.229.71.1",
"refid": "204.9.54.119",
"st": "2",
"t": "u",
"when": "64",
"poll": "64",
"reach": "377",
"delay": "68.699",
"offset": "-0.610",
"jitter": "2.576"
},
{
- `"s"` - "*",
- `"remote"` - "72.5.72.15",
- `"refid"` - "216.218.254.202",
- `"st"` - "2",
- `"t"` - "u",
- `"when"` - "63",
- `"poll"` - "64",
- `"reach"` - "377",
- `"delay"` - "22.654",
- `"offset"` - "0.231",
- `"jitter"` - "1.964"
"s": "*",
"remote": "72.5.72.15",
"refid": "216.218.254.202",
"st": "2",
"t": "u",
"when": "63",
"poll": "64",
"reach": "377",
"delay": "22.654",
"offset": "0.231",
"jitter": "1.964"
}
]
@ -232,16 +231,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,63 +7,62 @@ jc - JSON CLI output utility `/etc/passwd` file Parser
Usage (cli):
$ cat /etc/passwd | jc --passwd
$ cat /etc/passwd | jc --passwd
Usage (module):
import jc
result = jc.parse('passwd', passwd_file_output)
import jc
result = jc.parse('passwd', passwd_file_output)
or
or
import jc.parsers.passwd
result = jc.parsers.passwd.parse(passwd_file_output)
import jc.parsers.passwd
result = jc.parsers.passwd.parse(passwd_file_output)
Schema:
[
{
"username": string,
"password": string,
"uid": integer,
"gid": integer,
"comment": string,
"home": string,
"shell": string
}
]
**Examples**:
[
{
"username": string,
"password": string,
"uid": integer,
"gid": integer,
"comment": string,
"home": string,
"shell": string
}
]
Examples:
$ cat /etc/passwd | jc --passwd -p
[
{
- `"username"` - "nobody",
- `"password"` - "*",
- `"uid"` - -2,
- `"gid"` - -2,
- `"comment"` - "Unprivileged User",
- `"home"` - "/var/empty",
- `"shell"` - "/usr/bin/false"
"username": "nobody",
"password": "*",
"uid": -2,
"gid": -2,
"comment": "Unprivileged User",
"home": "/var/empty",
"shell": "/usr/bin/false"
},
{
- `"username"` - "root",
- `"password"` - "*",
- `"uid"` - 0,
- `"gid"` - 0,
- `"comment"` - "System Administrator",
- `"home"` - "/var/root",
- `"shell"` - "/bin/sh"
"username": "root",
"password": "*",
"uid": 0,
"gid": 0,
"comment": "System Administrator",
"home": "/var/root",
"shell": "/bin/sh"
},
{
- `"username"` - "daemon",
- `"password"` - "*",
- `"uid"` - 1,
- `"gid"` - 1,
- `"comment"` - "System Services",
- `"home"` - "/var/root",
- `"shell"` - "/usr/bin/false"
"username": "daemon",
"password": "*",
"uid": 1,
"gid": 1,
"comment": "System Services",
"home": "/var/root",
"shell": "/usr/bin/false"
},
...
]
@ -71,31 +70,31 @@ Schema:
$ cat /etc/passwd | jc --passwd -p -r
[
{
- `"username"` - "nobody",
- `"password"` - "*",
- `"uid"` - "-2",
- `"gid"` - "-2",
- `"comment"` - "Unprivileged User",
- `"home"` - "/var/empty",
- `"shell"` - "/usr/bin/false"
"username": "nobody",
"password": "*",
"uid": "-2",
"gid": "-2",
"comment": "Unprivileged User",
"home": "/var/empty",
"shell": "/usr/bin/false"
},
{
- `"username"` - "root",
- `"password"` - "*",
- `"uid"` - "0",
- `"gid"` - "0",
- `"comment"` - "System Administrator",
- `"home"` - "/var/root",
- `"shell"` - "/bin/sh"
"username": "root",
"password": "*",
"uid": "0",
"gid": "0",
"comment": "System Administrator",
"home": "/var/root",
"shell": "/bin/sh"
},
{
- `"username"` - "daemon",
- `"password"` - "*",
- `"uid"` - "1",
- `"gid"` - "1",
- `"comment"` - "System Services",
- `"home"` - "/var/root",
- `"shell"` - "/usr/bin/false"
"username": "daemon",
"password": "*",
"uid": "1",
"gid": "1",
"comment": "System Services",
"home": "/var/root",
"shell": "/usr/bin/false"
},
...
]
@ -120,16 +119,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -9,161 +9,160 @@ Supports `ping` and `ping6` output.
Usage (cli):
Note: Use the ping `-c` (count) option, otherwise data will not be
piped to `jc`.
Note: Use the ping `-c` (count) option, otherwise data will not be
piped to `jc`.
$ ping -c 3 1.2.3.4 | jc --ping
$ ping -c 3 1.2.3.4 | jc --ping
or
or
$ jc ping -c 3 1.2.3.4
$ jc ping -c 3 1.2.3.4
Usage (module):
import jc
result = jc.parse('ping', ping_command_output)
import jc
result = jc.parse('ping', ping_command_output)
or
or
import jc.parsers.ping
result = jc.parsers.ping.parse(ping_command_output)
import jc.parsers.ping
result = jc.parsers.ping.parse(ping_command_output)
Schema:
{
"source_ip": string,
"destination_ip": string,
"data_bytes": integer,
"pattern": string, # null if not set
"destination": string,
"packets_transmitted": integer,
"packets_received": integer,
"packet_loss_percent": float,
"duplicates": integer,
"round_trip_ms_min": float,
"round_trip_ms_avg": float,
"round_trip_ms_max": float,
"round_trip_ms_stddev": float,
"responses": [
{
"type": string, # [0]
"unparsed_line": string, # [1]
"timestamp": float,
"bytes": integer,
"response_ip": string,
"icmp_seq": integer,
"ttl": integer,
"time_ms": float,
"duplicate": boolean,
"vr": integer, # [2]
"hl": integer, # [2]
"tos": integer, # [2]
"len": integer, # [2]
"id": integer, # [2]
"flg": integer, # [2]
"off": integer, # [2]
"pro": integer, # [2]
"cks": ingeger, # [2]
"src": string,
"dst": string
}
]
}
{
"source_ip": string,
"destination_ip": string,
"data_bytes": integer,
"pattern": string, # null if not set
"destination": string,
"packets_transmitted": integer,
"packets_received": integer,
"packet_loss_percent": float,
"duplicates": integer,
"round_trip_ms_min": float,
"round_trip_ms_avg": float,
"round_trip_ms_max": float,
"round_trip_ms_stddev": float,
"responses": [
{
"type": string, # [0]
"unparsed_line": string, # [1]
"timestamp": float,
"bytes": integer,
"response_ip": string,
"icmp_seq": integer,
"ttl": integer,
"time_ms": float,
"duplicate": boolean,
"vr": integer, # [2]
"hl": integer, # [2]
"tos": integer, # [2]
"len": integer, # [2]
"id": integer, # [2]
"flg": integer, # [2]
"off": integer, # [2]
"pro": integer, # [2]
"cks": ingeger, # [2]
"src": string,
"dst": string
}
]
}
[0] 'reply', 'timeout', 'unparsable_line', etc. See
`_error_type.type_map` for all options
[1] only if an 'unparsable_line' type
[2] hex value converted to decimal
**Examples**:
[0] 'reply', 'timeout', 'unparsable_line', etc. See
`_error_type.type_map` for all options
[1] only if an 'unparsable_line' type
[2] hex value converted to decimal
Examples:
$ ping -c 3 -p ff cnn.com | jc --ping -p
{
- `"destination_ip"` - "151.101.1.67",
- `"data_bytes"` - 56,
- `"pattern"` - "0xff",
- `"destination"` - "cnn.com",
- `"packets_transmitted"` - 3,
- `"packets_received"` - 3,
- `"packet_loss_percent"` - 0.0,
- `"duplicates"` - 0,
- `"round_trip_ms_min"` - 28.015,
- `"round_trip_ms_avg"` - 32.848,
- `"round_trip_ms_max"` - 39.376,
- `"round_trip_ms_stddev"` - 4.79,
- `"responses"` - [
"destination_ip": "151.101.1.67",
"data_bytes": 56,
"pattern": "0xff",
"destination": "cnn.com",
"packets_transmitted": 3,
"packets_received": 3,
"packet_loss_percent": 0.0,
"duplicates": 0,
"round_trip_ms_min": 28.015,
"round_trip_ms_avg": 32.848,
"round_trip_ms_max": 39.376,
"round_trip_ms_stddev": 4.79,
"responses": [
{
- `"type"` - "reply",
- `"bytes"` - 64,
- `"response_ip"` - "151.101.1.67",
- `"icmp_seq"` - 0,
- `"ttl"` - 59,
- `"time_ms"` - 28.015,
- `"duplicate"` - false
"type": "reply",
"bytes": 64,
"response_ip": "151.101.1.67",
"icmp_seq": 0,
"ttl": 59,
"time_ms": 28.015,
"duplicate": false
},
{
- `"type"` - "reply",
- `"bytes"` - 64,
- `"response_ip"` - "151.101.1.67",
- `"icmp_seq"` - 1,
- `"ttl"` - 59,
- `"time_ms"` - 39.376,
- `"duplicate"` - false
"type": "reply",
"bytes": 64,
"response_ip": "151.101.1.67",
"icmp_seq": 1,
"ttl": 59,
"time_ms": 39.376,
"duplicate": false
},
{
- `"type"` - "reply",
- `"bytes"` - 64,
- `"response_ip"` - "151.101.1.67",
- `"icmp_seq"` - 2,
- `"ttl"` - 59,
- `"time_ms"` - 31.153,
- `"duplicate"` - false
"type": "reply",
"bytes": 64,
"response_ip": "151.101.1.67",
"icmp_seq": 2,
"ttl": 59,
"time_ms": 31.153,
"duplicate": false
}
]
}
$ ping -c 3 -p ff cnn.com | jc --ping -p -r
{
- `"destination_ip"` - "151.101.129.67",
- `"data_bytes"` - "56",
- `"pattern"` - "0xff",
- `"destination"` - "cnn.com",
- `"packets_transmitted"` - "3",
- `"packets_received"` - "3",
- `"packet_loss_percent"` - "0.0",
- `"duplicates"` - "0",
- `"round_trip_ms_min"` - "25.078",
- `"round_trip_ms_avg"` - "29.543",
- `"round_trip_ms_max"` - "32.553",
- `"round_trip_ms_stddev"` - "3.221",
- `"responses"` - [
"destination_ip": "151.101.129.67",
"data_bytes": "56",
"pattern": "0xff",
"destination": "cnn.com",
"packets_transmitted": "3",
"packets_received": "3",
"packet_loss_percent": "0.0",
"duplicates": "0",
"round_trip_ms_min": "25.078",
"round_trip_ms_avg": "29.543",
"round_trip_ms_max": "32.553",
"round_trip_ms_stddev": "3.221",
"responses": [
{
- `"type"` - "reply",
- `"bytes"` - "64",
- `"response_ip"` - "151.101.129.67",
- `"icmp_seq"` - "0",
- `"ttl"` - "59",
- `"time_ms"` - "25.078",
- `"duplicate"` - false
"type": "reply",
"bytes": "64",
"response_ip": "151.101.129.67",
"icmp_seq": "0",
"ttl": "59",
"time_ms": "25.078",
"duplicate": false
},
{
- `"type"` - "reply",
- `"bytes"` - "64",
- `"response_ip"` - "151.101.129.67",
- `"icmp_seq"` - "1",
- `"ttl"` - "59",
- `"time_ms"` - "30.999",
- `"duplicate"` - false
"type": "reply",
"bytes": "64",
"response_ip": "151.101.129.67",
"icmp_seq": "1",
"ttl": "59",
"time_ms": "30.999",
"duplicate": false
},
{
- `"type"` - "reply",
- `"bytes"` - "64",
- `"response_ip"` - "151.101.129.67",
- `"icmp_seq"` - "2",
- `"ttl"` - "59",
- `"time_ms"` - "32.553",
- `"duplicate"` - false
"type": "reply",
"bytes": "64",
"response_ip": "151.101.129.67",
"icmp_seq": "2",
"ttl": "59",
"time_ms": "32.553",
"duplicate": false
}
]
}
@ -188,16 +187,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -11,71 +11,70 @@ Supports `ping` and `ping6` output.
Usage (cli):
$ ping | jc --ping-s
$ ping | jc --ping-s
> Note: When piping `jc` converted `ping` output to other processes it may
appear the output is hanging due to the OS pipe buffers. This is because
`ping` output is too small to quickly fill up the buffer. Use the `-u`
option to unbuffer the `jc` output if you would like immediate output.
See the [readme](https://github.com/kellyjonbrazil/jc/tree/master#unbuffering-output)
for more information.
appear the output is hanging due to the OS pipe buffers. This is because
`ping` output is too small to quickly fill up the buffer. Use the `-u`
option to unbuffer the `jc` output if you would like immediate output.
See the [readme](https://github.com/kellyjonbrazil/jc/tree/master#unbuffering-output)
for more information.
Usage (module):
import jc
# result is an iterable object (generator)
result = jc.parse('ping_s', ping_command_output.splitlines())
for item in result:
# do something
import jc
# result is an iterable object (generator)
result = jc.parse('ping_s', ping_command_output.splitlines())
for item in result:
# do something
or
or
import jc.parsers.ping_s
# result is an iterable object (generator)
result = jc.parsers.ping_s.parse(ping_command_output.splitlines())
for item in result:
# do something
import jc.parsers.ping_s
# result is an iterable object (generator)
result = jc.parsers.ping_s.parse(ping_command_output.splitlines())
for item in result:
# do something
Schema:
{
"type": string, # [0]
"source_ip": string,
"destination_ip": string,
"sent_bytes": integer,
"pattern": string, # (null if not set)
"destination": string,
"timestamp": float,
"response_bytes": integer,
"response_ip": string,
"icmp_seq": integer,
"ttl": integer,
"time_ms": float,
"duplicate": boolean,
"packets_transmitted": integer,
"packets_received": integer,
"packet_loss_percent": float,
"duplicates": integer,
"round_trip_ms_min": float,
"round_trip_ms_avg": float,
"round_trip_ms_max": float,
"round_trip_ms_stddev": float,
{
"type": string, # [0]
"source_ip": string,
"destination_ip": string,
"sent_bytes": integer,
"pattern": string, # (null if not set)
"destination": string,
"timestamp": float,
"response_bytes": integer,
"response_ip": string,
"icmp_seq": integer,
"ttl": integer,
"time_ms": float,
"duplicate": boolean,
"packets_transmitted": integer,
"packets_received": integer,
"packet_loss_percent": float,
"duplicates": integer,
"round_trip_ms_min": float,
"round_trip_ms_avg": float,
"round_trip_ms_max": float,
"round_trip_ms_stddev": float,
# Below object only exists if using -qq or ignore_exceptions=True
# Below object only exists if using -qq or ignore_exceptions=True
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
[0] 'reply', 'timeout', 'summary', etc. See `_error_type.type_map`
for all options.
**Examples**:
[0] 'reply', 'timeout', 'summary', etc. See `_error_type.type_map`
for all options.
Examples:
$ ping 1.1.1.1 | jc --ping-s
{"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...}
@ -109,25 +108,20 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False)
Main text parsing generator function. Returns an iterator object.
**Arguments**:
Parameters:
- `data` - (iterable) line-based text data to parse
data: (iterable) line-based text data to parse
(e.g. sys.stdin or str.splitlines())
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
**Yields**:
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
Yields:
Dictionary. Raw or processed structured data.
**Returns**:
Returns:
Iterator object

View File

@ -7,48 +7,47 @@ jc - JSON CLI output utility `pip-list` command output parser
Usage (cli):
$ pip list | jc --pip-list
$ pip list | jc --pip-list
or
or
$ jc pip list
$ jc pip list
Usage (module):
import jc
result = jc.parse('pip_list', pip_list_command_output)
import jc
result = jc.parse('pip_list', pip_list_command_output)
or
or
import jc.parsers.pip_list
result = jc.parsers.pip_list.parse(pip_list_command_output)
import jc.parsers.pip_list
result = jc.parsers.pip_list.parse(pip_list_command_output)
Schema:
[
{
"package": string,
"version": string,
"location": string
}
]
**Examples**:
[
{
"package": string,
"version": string,
"location": string
}
]
Examples:
$ pip list | jc --pip-list -p
[
{
- `"package"` - "ansible",
- `"version"` - "2.8.5"
"package": "ansible",
"version": "2.8.5"
},
{
- `"package"` - "antlr4-python3-runtime",
- `"version"` - "4.7.2"
"package": "antlr4-python3-runtime",
"version": "4.7.2"
},
{
- `"package"` - "asn1crypto",
- `"version"` - "0.24.0"
"package": "asn1crypto",
"version": "0.24.0"
},
...
]
@ -73,16 +72,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,67 +7,66 @@ jc - JSON CLI output utility `pip-show` command output parser
Usage (cli):
$ pip show | jc --pip-show
$ pip show | jc --pip-show
or
or
$ jc pip show
$ jc pip show
Usage (module):
import jc
result = jc.parse('pip_show', pip_show_command_output)
import jc
result = jc.parse('pip_show', pip_show_command_output)
or
or
import jc.parsers.pip_show
result = jc.parsers.pip_show.parse(pip_show_command_output)
import jc.parsers.pip_show
result = jc.parsers.pip_show.parse(pip_show_command_output)
Schema:
[
{
"name": string,
"version": string,
"summary": string,
"home_page": string,
"author": string,
"author_email": string,
"license": string,
"location": string,
"requires": string,
"required_by": string
}
]
**Examples**:
[
{
"name": string,
"version": string,
"summary": string,
"home_page": string,
"author": string,
"author_email": string,
"license": string,
"location": string,
"requires": string,
"required_by": string
}
]
Examples:
$ pip show wrapt jc wheel | jc --pip-show -p
[
{
- `"name"` - "wrapt",
- `"version"` - "1.11.2",
- `"summary"` - "Module for decorators, wrappers and monkey patching.",
- `"home_page"` - "https://github.com/GrahamDumpleton/wrapt",
- `"author"` - "Graham Dumpleton",
- `"author_email"` - "Graham.Dumpleton@gmail.com",
- `"license"` - "BSD",
- `"location"` - "/usr/local/lib/python3.7/site-packages",
- `"requires"` - null,
- `"required_by"` - "astroid"
"name": "wrapt",
"version": "1.11.2",
"summary": "Module for decorators, wrappers and monkey patching.",
"home_page": "https://github.com/GrahamDumpleton/wrapt",
"author": "Graham Dumpleton",
"author_email": "Graham.Dumpleton@gmail.com",
"license": "BSD",
"location": "/usr/local/lib/python3.7/site-packages",
"requires": null,
"required_by": "astroid"
},
{
- `"name"` - "wheel",
- `"version"` - "0.33.4",
- `"summary"` - "A built-package format for Python.",
- `"home_page"` - "https://github.com/pypa/wheel",
- `"author"` - "Daniel Holth",
- `"author_email"` - "dholth@fastmail.fm",
- `"license"` - "MIT",
- `"location"` - "/usr/local/lib/python3.7/site-packages",
- `"requires"` - null,
- `"required_by"` - null
"name": "wheel",
"version": "0.33.4",
"summary": "A built-package format for Python.",
"home_page": "https://github.com/pypa/wheel",
"author": "Daniel Holth",
"author_email": "dholth@fastmail.fm",
"license": "MIT",
"location": "/usr/local/lib/python3.7/site-packages",
"requires": null,
"required_by": null
}
]
@ -91,16 +90,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -11,80 +11,79 @@ jc - JSON CLI output utility `ps` command output parser
Usage (cli):
$ ps | jc --ps
$ ps | jc --ps
or
or
$ jc ps
$ jc ps
Usage (module):
import jc
result = jc.parse('ps', ps_command_output)
import jc
result = jc.parse('ps', ps_command_output)
or
or
import jc.parsers.ps
result = jc.parsers.ps.parse(ps_command_output)
import jc.parsers.ps
result = jc.parsers.ps.parse(ps_command_output)
Schema:
[
{
"uid": string,
"pid": integer,
"ppid": integer,
"c": integer,
"stime": string,
"tty": string, # ? or ?? = Null
"tt": string, # ?? = Null
"time": string,
"cmd": string,
"user": string,
"cpu_percent": float,
"mem_percent": float,
"vsz": integer,
"rss": integer,
"stat": string,
"start": string,
"command": string
}
]
**Examples**:
[
{
"uid": string,
"pid": integer,
"ppid": integer,
"c": integer,
"stime": string,
"tty": string, # ? or ?? = Null
"tt": string, # ?? = Null
"time": string,
"cmd": string,
"user": string,
"cpu_percent": float,
"mem_percent": float,
"vsz": integer,
"rss": integer,
"stat": string,
"start": string,
"command": string
}
]
Examples:
$ ps -ef | jc --ps -p
[
{
- `"uid"` - "root",
- `"pid"` - 1,
- `"ppid"` - 0,
- `"c"` - 0,
- `"stime"` - "Nov01",
- `"tty"` - null,
- `"time"` - "00:00:11",
- `"cmd"` - "/usr/lib/systemd/systemd --switched-root --system --dese..."
"uid": "root",
"pid": 1,
"ppid": 0,
"c": 0,
"stime": "Nov01",
"tty": null,
"time": "00:00:11",
"cmd": "/usr/lib/systemd/systemd --switched-root --system --dese..."
},
{
- `"uid"` - "root",
- `"pid"` - 2,
- `"ppid"` - 0,
- `"c"` - 0,
- `"stime"` - "Nov01",
- `"tty"` - null,
- `"time"` - "00:00:00",
- `"cmd"` - "[kthreadd]"
"uid": "root",
"pid": 2,
"ppid": 0,
"c": 0,
"stime": "Nov01",
"tty": null,
"time": "00:00:00",
"cmd": "[kthreadd]"
},
{
- `"uid"` - "root",
- `"pid"` - 4,
- `"ppid"` - 2,
- `"c"` - 0,
- `"stime"` - "Nov01",
- `"tty"` - null,
- `"time"` - "00:00:00",
- `"cmd"` - "[kworker/0:0H]"
"uid": "root",
"pid": 4,
"ppid": 2,
"c": 0,
"stime": "Nov01",
"tty": null,
"time": "00:00:00",
"cmd": "[kworker/0:0H]"
},
...
]
@ -92,34 +91,34 @@ Schema:
$ ps -ef | jc --ps -p -r
[
{
- `"uid"` - "root",
- `"pid"` - "1",
- `"ppid"` - "0",
- `"c"` - "0",
- `"stime"` - "Nov01",
- `"tty"` - "?",
- `"time"` - "00:00:11",
- `"cmd"` - "/usr/lib/systemd/systemd --switched-root --system --dese..."
"uid": "root",
"pid": "1",
"ppid": "0",
"c": "0",
"stime": "Nov01",
"tty": "?",
"time": "00:00:11",
"cmd": "/usr/lib/systemd/systemd --switched-root --system --dese..."
},
{
- `"uid"` - "root",
- `"pid"` - "2",
- `"ppid"` - "0",
- `"c"` - "0",
- `"stime"` - "Nov01",
- `"tty"` - "?",
- `"time"` - "00:00:00",
- `"cmd"` - "[kthreadd]"
"uid": "root",
"pid": "2",
"ppid": "0",
"c": "0",
"stime": "Nov01",
"tty": "?",
"time": "00:00:00",
"cmd": "[kthreadd]"
},
{
- `"uid"` - "root",
- `"pid"` - "4",
- `"ppid"` - "2",
- `"c"` - "0",
- `"stime"` - "Nov01",
- `"tty"` - "?",
- `"time"` - "00:00:00",
- `"cmd"` - "[kworker/0:0H]"
"uid": "root",
"pid": "4",
"ppid": "2",
"c": "0",
"stime": "Nov01",
"tty": "?",
"time": "00:00:00",
"cmd": "[kworker/0:0H]"
},
...
]
@ -127,43 +126,43 @@ Schema:
$ ps axu | jc --ps -p
[
{
- `"user"` - "root",
- `"pid"` - 1,
- `"cpu_percent"` - 0.0,
- `"mem_percent"` - 0.1,
- `"vsz"` - 128072,
- `"rss"` - 6784,
- `"tty"` - null,
- `"stat"` - "Ss",
- `"start"` - "Nov09",
- `"time"` - "0:08",
- `"command"` - "/usr/lib/systemd/systemd --switched-root --system --..."
"user": "root",
"pid": 1,
"cpu_percent": 0.0,
"mem_percent": 0.1,
"vsz": 128072,
"rss": 6784,
"tty": null,
"stat": "Ss",
"start": "Nov09",
"time": "0:08",
"command": "/usr/lib/systemd/systemd --switched-root --system --..."
},
{
- `"user"` - "root",
- `"pid"` - 2,
- `"cpu_percent"` - 0.0,
- `"mem_percent"` - 0.0,
- `"vsz"` - 0,
- `"rss"` - 0,
- `"tty"` - null,
- `"stat"` - "S",
- `"start"` - "Nov09",
- `"time"` - "0:00",
- `"command"` - "[kthreadd]"
"user": "root",
"pid": 2,
"cpu_percent": 0.0,
"mem_percent": 0.0,
"vsz": 0,
"rss": 0,
"tty": null,
"stat": "S",
"start": "Nov09",
"time": "0:00",
"command": "[kthreadd]"
},
{
- `"user"` - "root",
- `"pid"` - 4,
- `"cpu_percent"` - 0.0,
- `"mem_percent"` - 0.0,
- `"vsz"` - 0,
- `"rss"` - 0,
- `"tty"` - null,
- `"stat"` - "S<",
- `"start"` - "Nov09",
- `"time"` - "0:00",
- `"command"` - "[kworker/0:0H]"
"user": "root",
"pid": 4,
"cpu_percent": 0.0,
"mem_percent": 0.0,
"vsz": 0,
"rss": 0,
"tty": null,
"stat": "S<",
"start": "Nov09",
"time": "0:00",
"command": "[kworker/0:0H]"
},
...
]
@ -171,43 +170,43 @@ Schema:
$ ps axu | jc --ps -p -r
[
{
- `"user"` - "root",
- `"pid"` - "1",
- `"cpu_percent"` - "0.0",
- `"mem_percent"` - "0.1",
- `"vsz"` - "128072",
- `"rss"` - "6784",
- `"tty"` - "?",
- `"stat"` - "Ss",
- `"start"` - "Nov09",
- `"time"` - "0:08",
- `"command"` - "/usr/lib/systemd/systemd --switched-root --system --..."
"user": "root",
"pid": "1",
"cpu_percent": "0.0",
"mem_percent": "0.1",
"vsz": "128072",
"rss": "6784",
"tty": "?",
"stat": "Ss",
"start": "Nov09",
"time": "0:08",
"command": "/usr/lib/systemd/systemd --switched-root --system --..."
},
{
- `"user"` - "root",
- `"pid"` - "2",
- `"cpu_percent"` - "0.0",
- `"mem_percent"` - "0.0",
- `"vsz"` - "0",
- `"rss"` - "0",
- `"tty"` - "?",
- `"stat"` - "S",
- `"start"` - "Nov09",
- `"time"` - "0:00",
- `"command"` - "[kthreadd]"
"user": "root",
"pid": "2",
"cpu_percent": "0.0",
"mem_percent": "0.0",
"vsz": "0",
"rss": "0",
"tty": "?",
"stat": "S",
"start": "Nov09",
"time": "0:00",
"command": "[kthreadd]"
},
{
- `"user"` - "root",
- `"pid"` - "4",
- `"cpu_percent"` - "0.0",
- `"mem_percent"` - "0.0",
- `"vsz"` - "0",
- `"rss"` - "0",
- `"tty"` - "?",
- `"stat"` - "S<",
- `"start"` - "Nov09",
- `"time"` - "0:00",
- `"command"` - "[kworker/0:0H]"
"user": "root",
"pid": "4",
"cpu_percent": "0.0",
"mem_percent": "0.0",
"vsz": "0",
"rss": "0",
"tty": "?",
"stat": "S<",
"start": "Nov09",
"time": "0:00",
"command": "[kworker/0:0H]"
},
...
]
@ -232,16 +231,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,78 +7,77 @@ jc - JSON CLI output utility `route` command output parser
Usage (cli):
$ route | jc --route
$ route | jc --route
or
or
$ jc route
$ jc route
Usage (module):
import jc
result = jc.parse('route', route_command_output)
import jc
result = jc.parse('route', route_command_output)
or
or
import jc.parsers.route
result = jc.parsers.route.parse(route_command_output)
import jc.parsers.route
result = jc.parsers.route.parse(route_command_output)
Schema:
[
{
"destination": string,
"gateway": string,
"genmask": string,
"flags": string,
"flags_pretty": [
string
]
"metric": integer,
"ref": integer,
"use": integer,
"mss": integer,
"window": integer,
"irtt": integer,
"iface": string
}
]
**Examples**:
[
{
"destination": string,
"gateway": string,
"genmask": string,
"flags": string,
"flags_pretty": [
string
]
"metric": integer,
"ref": integer,
"use": integer,
"mss": integer,
"window": integer,
"irtt": integer,
"iface": string
}
]
Examples:
$ route -ee | jc --route -p
[
{
- `"destination"` - "default",
- `"gateway"` - "_gateway",
- `"genmask"` - "0.0.0.0",
- `"flags"` - "UG",
- `"metric"` - 202,
- `"ref"` - 0,
- `"use"` - 0,
- `"iface"` - "ens33",
- `"mss"` - 0,
- `"window"` - 0,
- `"irtt"` - 0,
- `"flags_pretty"` - [
"destination": "default",
"gateway": "_gateway",
"genmask": "0.0.0.0",
"flags": "UG",
"metric": 202,
"ref": 0,
"use": 0,
"iface": "ens33",
"mss": 0,
"window": 0,
"irtt": 0,
"flags_pretty": [
"UP",
"GATEWAY"
]
},
{
- `"destination"` - "192.168.71.0",
- `"gateway"` - "0.0.0.0",
- `"genmask"` - "255.255.255.0",
- `"flags"` - "U",
- `"metric"` - 202,
- `"ref"` - 0,
- `"use"` - 0,
- `"iface"` - "ens33",
- `"mss"` - 0,
- `"window"` - 0,
- `"irtt"` - 0,
- `"flags_pretty"` - [
"destination": "192.168.71.0",
"gateway": "0.0.0.0",
"genmask": "255.255.255.0",
"flags": "U",
"metric": 202,
"ref": 0,
"use": 0,
"iface": "ens33",
"mss": 0,
"window": 0,
"irtt": 0,
"flags_pretty": [
"UP"
]
}
@ -87,30 +86,30 @@ string
$ route -ee | jc --route -p -r
[
{
- `"destination"` - "default",
- `"gateway"` - "_gateway",
- `"genmask"` - "0.0.0.0",
- `"flags"` - "UG",
- `"metric"` - "202",
- `"ref"` - "0",
- `"use"` - "0",
- `"iface"` - "ens33",
- `"mss"` - "0",
- `"window"` - "0",
- `"irtt"` - "0"
"destination": "default",
"gateway": "_gateway",
"genmask": "0.0.0.0",
"flags": "UG",
"metric": "202",
"ref": "0",
"use": "0",
"iface": "ens33",
"mss": "0",
"window": "0",
"irtt": "0"
},
{
- `"destination"` - "192.168.71.0",
- `"gateway"` - "0.0.0.0",
- `"genmask"` - "255.255.255.0",
- `"flags"` - "U",
- `"metric"` - "202",
- `"ref"` - "0",
- `"use"` - "0",
- `"iface"` - "ens33",
- `"mss"` - "0",
- `"window"` - "0",
- `"irtt"` - "0"
"destination": "192.168.71.0",
"gateway": "0.0.0.0",
"genmask": "255.255.255.0",
"flags": "U",
"metric": "202",
"ref": "0",
"use": "0",
"iface": "ens33",
"mss": "0",
"window": "0",
"irtt": "0"
}
]
@ -134,16 +133,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -15,108 +15,107 @@ only available if the timezone field is UTC.
Usage (cli):
$ rpm -qia | jc --rpm-qi
$ rpm -qia | jc --rpm-qi
or
or
$ jc rpm -qia
$ jc rpm -qia
Usage (module):
import jc
result = jc.parse('rpm_qi', rpm_qi_command_output)
import jc
result = jc.parse('rpm_qi', rpm_qi_command_output)
or
or
import jc.parsers.rpm_qi
result = jc.parsers.rpm_qi.parse(rpm_qi_command_output)
import jc.parsers.rpm_qi
result = jc.parsers.rpm_qi.parse(rpm_qi_command_output)
Schema:
[
{
"name": string,
"epoch": integer,
"version": string,
"release": string,
"architecture": string,
"install_date": string,
"install_date_epoch": integer, # [0]
"install_date_epoch_utc": integer, # [1]
"group": string,
"size": integer,
"license": string,
"signature": string,
"source_rpm": string,
"build_date": string,
"build_epoch": integer, # [0]
"build_epoch_utc": integer, # [1]
"build_host": string,
"relocations": string,
"packager": string,
"vendor": string,
"url": string,
"summary": string,
"description": string
}
]
[
{
"name": string,
"epoch": integer,
"version": string,
"release": string,
"architecture": string,
"install_date": string,
"install_date_epoch": integer, # [0]
"install_date_epoch_utc": integer, # [1]
"group": string,
"size": integer,
"license": string,
"signature": string,
"source_rpm": string,
"build_date": string,
"build_epoch": integer, # [0]
"build_epoch_utc": integer, # [1]
"build_host": string,
"relocations": string,
"packager": string,
"vendor": string,
"url": string,
"summary": string,
"description": string
}
]
[0] naive timestamp
[1] Aware timestamp if timezone is UTC
**Examples**:
[0] naive timestamp
[1] Aware timestamp if timezone is UTC
Examples:
$ rpm -qia | jc --rpm-qi -p
[
{
- `"name"` - "make",
- `"epoch"` - 1,
- `"version"` - "3.82",
- `"release"` - "24.el7",
- `"architecture"` - "x86_64",
- `"install_date"` - "Wed 16 Oct 2019 09:21:42 AM PDT",
- `"group"` - "Development/Tools",
- `"size"` - 1160660,
- `"license"` - "GPLv2+",
- `"signature"` - "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...",
- `"source_rpm"` - "make-3.82-24.el7.src.rpm",
- `"build_date"` - "Thu 08 Aug 2019 05:47:25 PM PDT",
- `"build_host"` - "x86-01.bsys.centos.org",
- `"relocations"` - "(not relocatable)",
- `"packager"` - "CentOS BuildSystem <http://bugs.centos.org>",
- `"vendor"` - "CentOS",
- `"url"` - "http://www.gnu.org/software/make/",
- `"summary"` - "A GNU tool which simplifies the build process for ...",
- `"description"` - "A GNU tool for controlling the generation of ex...",
- `"build_epoch"` - 1565311645,
- `"build_epoch_utc"` - null,
- `"install_date_epoch"` - 1571242902,
- `"install_date_epoch_utc"` - null
"name": "make",
"epoch": 1,
"version": "3.82",
"release": "24.el7",
"architecture": "x86_64",
"install_date": "Wed 16 Oct 2019 09:21:42 AM PDT",
"group": "Development/Tools",
"size": 1160660,
"license": "GPLv2+",
"signature": "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...",
"source_rpm": "make-3.82-24.el7.src.rpm",
"build_date": "Thu 08 Aug 2019 05:47:25 PM PDT",
"build_host": "x86-01.bsys.centos.org",
"relocations": "(not relocatable)",
"packager": "CentOS BuildSystem <http://bugs.centos.org>",
"vendor": "CentOS",
"url": "http://www.gnu.org/software/make/",
"summary": "A GNU tool which simplifies the build process for ...",
"description": "A GNU tool for controlling the generation of ex...",
"build_epoch": 1565311645,
"build_epoch_utc": null,
"install_date_epoch": 1571242902,
"install_date_epoch_utc": null
},
{
- `"name"` - "kbd-legacy",
- `"version"` - "1.15.5",
- `"release"` - "15.el7",
- `"architecture"` - "noarch",
- `"install_date"` - "Thu 15 Aug 2019 10:53:08 AM PDT",
- `"group"` - "System Environment/Base",
- `"size"` - 503608,
- `"license"` - "GPLv2+",
- `"signature"` - "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...",
- `"source_rpm"` - "kbd-1.15.5-15.el7.src.rpm",
- `"build_date"` - "Tue 30 Oct 2018 03:40:00 PM PDT",
- `"build_host"` - "x86-01.bsys.centos.org",
- `"relocations"` - "(not relocatable)",
- `"packager"` - "CentOS BuildSystem <http://bugs.centos.org>",
- `"vendor"` - "CentOS",
- `"url"` - "http://ftp.altlinux.org/pub/people/legion/kbd",
- `"summary"` - "Legacy data for kbd package",
- `"description"` - "The kbd-legacy package contains original keymap...",
- `"build_epoch"` - 1540939200,
- `"build_epoch_utc"` - null,
- `"install_date_epoch"` - 1565891588,
- `"install_date_epoch_utc"` - null
"name": "kbd-legacy",
"version": "1.15.5",
"release": "15.el7",
"architecture": "noarch",
"install_date": "Thu 15 Aug 2019 10:53:08 AM PDT",
"group": "System Environment/Base",
"size": 503608,
"license": "GPLv2+",
"signature": "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...",
"source_rpm": "kbd-1.15.5-15.el7.src.rpm",
"build_date": "Tue 30 Oct 2018 03:40:00 PM PDT",
"build_host": "x86-01.bsys.centos.org",
"relocations": "(not relocatable)",
"packager": "CentOS BuildSystem <http://bugs.centos.org>",
"vendor": "CentOS",
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
"summary": "Legacy data for kbd package",
"description": "The kbd-legacy package contains original keymap...",
"build_epoch": 1540939200,
"build_epoch_utc": null,
"install_date_epoch": 1565891588,
"install_date_epoch_utc": null
},
...
]
@ -124,45 +123,45 @@ Schema:
$ rpm -qia | jc --rpm-qi -p -r
[
{
- `"name"` - "make",
- `"epoch"` - "1",
- `"version"` - "3.82",
- `"release"` - "24.el7",
- `"architecture"` - "x86_64",
- `"install_date"` - "Wed 16 Oct 2019 09:21:42 AM PDT",
- `"group"` - "Development/Tools",
- `"size"` - "1160660",
- `"license"` - "GPLv2+",
- `"signature"` - "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...",
- `"source_rpm"` - "make-3.82-24.el7.src.rpm",
- `"build_date"` - "Thu 08 Aug 2019 05:47:25 PM PDT",
- `"build_host"` - "x86-01.bsys.centos.org",
- `"relocations"` - "(not relocatable)",
- `"packager"` - "CentOS BuildSystem <http://bugs.centos.org>",
- `"vendor"` - "CentOS",
- `"url"` - "http://www.gnu.org/software/make/",
- `"summary"` - "A GNU tool which simplifies the build process for...",
- `"description"` - "A GNU tool for controlling the generation of exe..."
"name": "make",
"epoch": "1",
"version": "3.82",
"release": "24.el7",
"architecture": "x86_64",
"install_date": "Wed 16 Oct 2019 09:21:42 AM PDT",
"group": "Development/Tools",
"size": "1160660",
"license": "GPLv2+",
"signature": "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...",
"source_rpm": "make-3.82-24.el7.src.rpm",
"build_date": "Thu 08 Aug 2019 05:47:25 PM PDT",
"build_host": "x86-01.bsys.centos.org",
"relocations": "(not relocatable)",
"packager": "CentOS BuildSystem <http://bugs.centos.org>",
"vendor": "CentOS",
"url": "http://www.gnu.org/software/make/",
"summary": "A GNU tool which simplifies the build process for...",
"description": "A GNU tool for controlling the generation of exe..."
},
{
- `"name"` - "kbd-legacy",
- `"version"` - "1.15.5",
- `"release"` - "15.el7",
- `"architecture"` - "noarch",
- `"install_date"` - "Thu 15 Aug 2019 10:53:08 AM PDT",
- `"group"` - "System Environment/Base",
- `"size"` - "503608",
- `"license"` - "GPLv2+",
- `"signature"` - "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...",
- `"source_rpm"` - "kbd-1.15.5-15.el7.src.rpm",
- `"build_date"` - "Tue 30 Oct 2018 03:40:00 PM PDT",
- `"build_host"` - "x86-01.bsys.centos.org",
- `"relocations"` - "(not relocatable)",
- `"packager"` - "CentOS BuildSystem <http://bugs.centos.org>",
- `"vendor"` - "CentOS",
- `"url"` - "http://ftp.altlinux.org/pub/people/legion/kbd",
- `"summary"` - "Legacy data for kbd package",
- `"description"` - "The kbd-legacy package contains original keymaps..."
"name": "kbd-legacy",
"version": "1.15.5",
"release": "15.el7",
"architecture": "noarch",
"install_date": "Thu 15 Aug 2019 10:53:08 AM PDT",
"group": "System Environment/Base",
"size": "503608",
"license": "GPLv2+",
"signature": "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...",
"source_rpm": "kbd-1.15.5-15.el7.src.rpm",
"build_date": "Tue 30 Oct 2018 03:40:00 PM PDT",
"build_host": "x86-01.bsys.centos.org",
"relocations": "(not relocatable)",
"packager": "CentOS BuildSystem <http://bugs.centos.org>",
"vendor": "CentOS",
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
"summary": "Legacy data for kbd package",
"description": "The kbd-legacy package contains original keymaps..."
},
...
]
@ -187,16 +186,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -16,195 +16,194 @@ Supports the following `sfdisk` options:
Usage (cli):
# sfdisk -l | jc --sfdisk
# sfdisk -l | jc --sfdisk
or
or
# jc sfdisk -l
# jc sfdisk -l
Usage (module):
import jc
result = jc.parse('sfdisk', sfdisk_command_output)
import jc
result = jc.parse('sfdisk', sfdisk_command_output)
or
or
import jc.parsers.sfdisk
result = jc.parsers.sfdisk.parse(sfdisk_command_output)
import jc.parsers.sfdisk
result = jc.parsers.sfdisk.parse(sfdisk_command_output)
Schema:
[
{
"disk": string,
"disk_size": string,
"free_disk_size": string,
"bytes": integer,
"free_bytes": integer,
"sectors": integer,
"free_sectors": integer,
"cylinders": integer,
"heads": integer,
"sectors_per_track": integer,
"units": string,
"logical_sector_size": integer,
"physical_sector_size": integer,
"min_io_size": integer,
"optimal_io_size": integer,
"disk_label_type": string,
"disk_identifier": string,
"disk_model": string,
"partitions": [
{
"device": string,
"boot": boolean,
"start": integer,
"end": integer,
"size": string, # [0]
"cyls": integer,
"mib": integer,
"blocks": integer,
"sectors": integer,
"id": string,
"system": string,
"type": string
}
]
}
]
[
{
"disk": string,
"disk_size": string,
"free_disk_size": string,
"bytes": integer,
"free_bytes": integer,
"sectors": integer,
"free_sectors": integer,
"cylinders": integer,
"heads": integer,
"sectors_per_track": integer,
"units": string,
"logical_sector_size": integer,
"physical_sector_size": integer,
"min_io_size": integer,
"optimal_io_size": integer,
"disk_label_type": string,
"disk_identifier": string,
"disk_model": string,
"partitions": [
{
"device": string,
"boot": boolean,
"start": integer,
"end": integer,
"size": string, # [0]
"cyls": integer,
"mib": integer,
"blocks": integer,
"sectors": integer,
"id": string,
"system": string,
"type": string
}
]
}
]
[0] will be integer when using deprecated -d sfdisk option
**Examples**:
[0] will be integer when using deprecated -d sfdisk option
Examples:
# sfdisk -l | jc --sfdisk -p
[
{
- `"disk"` - "/dev/sda",
- `"cylinders"` - 2610,
- `"heads"` - 255,
- `"sectors_per_track"` - 63,
- `"units"` - "cylinders of 8225280 bytes, blocks of 1024 bytes, ...",
- `"partitions"` - [
"disk": "/dev/sda",
"cylinders": 2610,
"heads": 255,
"sectors_per_track": 63,
"units": "cylinders of 8225280 bytes, blocks of 1024 bytes, ...",
"partitions": [
{
- `"device"` - "/dev/sda1",
- `"boot"` - true,
- `"start"` - 0,
- `"end"` - 130,
- `"cyls"` - 131,
- `"blocks"` - 1048576,
- `"id"` - "83",
- `"system"` - "Linux"
"device": "/dev/sda1",
"boot": true,
"start": 0,
"end": 130,
"cyls": 131,
"blocks": 1048576,
"id": "83",
"system": "Linux"
},
{
- `"device"` - "/dev/sda2",
- `"boot"` - false,
- `"start"` - 130,
- `"end"` - 2610,
- `"cyls"` - 2481,
- `"blocks"` - 19921920,
- `"id"` - "8e",
- `"system"` - "Linux LVM"
"device": "/dev/sda2",
"boot": false,
"start": 130,
"end": 2610,
"cyls": 2481,
"blocks": 19921920,
"id": "8e",
"system": "Linux LVM"
},
{
- `"device"` - "/dev/sda3",
- `"boot"` - false,
- `"start"` - 0,
- `"end"` - null,
- `"cyls"` - 0,
- `"blocks"` - 0,
- `"id"` - "0",
- `"system"` - "Empty"
"device": "/dev/sda3",
"boot": false,
"start": 0,
"end": null,
"cyls": 0,
"blocks": 0,
"id": "0",
"system": "Empty"
},
{
- `"device"` - "/dev/sda4",
- `"boot"` - false,
- `"start"` - 0,
- `"end"` - null,
- `"cyls"` - 0,
- `"blocks"` - 0,
- `"id"` - "0",
- `"system"` - "Empty"
"device": "/dev/sda4",
"boot": false,
"start": 0,
"end": null,
"cyls": 0,
"blocks": 0,
"id": "0",
"system": "Empty"
}
]
},
{
- `"disk"` - "/dev/mapper/centos-root",
- `"cylinders"` - 2218,
- `"heads"` - 255,
- `"sectors_per_track"` - 63
"disk": "/dev/mapper/centos-root",
"cylinders": 2218,
"heads": 255,
"sectors_per_track": 63
},
{
- `"disk"` - "/dev/mapper/centos-swap",
- `"cylinders"` - 261,
- `"heads"` - 255,
- `"sectors_per_track"` - 63
"disk": "/dev/mapper/centos-swap",
"cylinders": 261,
"heads": 255,
"sectors_per_track": 63
}
]
# sfdisk -l | jc --sfdisk -p -r
[
{
- `"disk"` - "/dev/sda",
- `"cylinders"` - "2610",
- `"heads"` - "255",
- `"sectors_per_track"` - "63",
- `"units"` - "cylinders of 8225280 bytes, blocks of 1024 bytes, co...",
- `"partitions"` - [
"disk": "/dev/sda",
"cylinders": "2610",
"heads": "255",
"sectors_per_track": "63",
"units": "cylinders of 8225280 bytes, blocks of 1024 bytes, co...",
"partitions": [
{
- `"device"` - "/dev/sda1",
- `"boot"` - "*",
- `"start"` - "0+",
- `"end"` - "130-",
- `"cyls"` - "131-",
- `"blocks"` - "1048576",
- `"id"` - "83",
- `"system"` - "Linux"
"device": "/dev/sda1",
"boot": "*",
"start": "0+",
"end": "130-",
"cyls": "131-",
"blocks": "1048576",
"id": "83",
"system": "Linux"
},
{
- `"device"` - "/dev/sda2",
- `"boot"` - null,
- `"start"` - "130+",
- `"end"` - "2610-",
- `"cyls"` - "2481-",
- `"blocks"` - "19921920",
- `"id"` - "8e",
- `"system"` - "Linux LVM"
"device": "/dev/sda2",
"boot": null,
"start": "130+",
"end": "2610-",
"cyls": "2481-",
"blocks": "19921920",
"id": "8e",
"system": "Linux LVM"
},
{
- `"device"` - "/dev/sda3",
- `"boot"` - null,
- `"start"` - "0",
- `"end"` - "-",
- `"cyls"` - "0",
- `"blocks"` - "0",
- `"id"` - "0",
- `"system"` - "Empty"
"device": "/dev/sda3",
"boot": null,
"start": "0",
"end": "-",
"cyls": "0",
"blocks": "0",
"id": "0",
"system": "Empty"
},
{
- `"device"` - "/dev/sda4",
- `"boot"` - null,
- `"start"` - "0",
- `"end"` - "-",
- `"cyls"` - "0",
- `"blocks"` - "0",
- `"id"` - "0",
- `"system"` - "Empty"
"device": "/dev/sda4",
"boot": null,
"start": "0",
"end": "-",
"cyls": "0",
"blocks": "0",
"id": "0",
"system": "Empty"
}
]
},
{
- `"disk"` - "/dev/mapper/centos-root",
- `"cylinders"` - "2218",
- `"heads"` - "255",
- `"sectors_per_track"` - "63"
"disk": "/dev/mapper/centos-root",
"cylinders": "2218",
"heads": "255",
"sectors_per_track": "63"
},
{
- `"disk"` - "/dev/mapper/centos-swap",
- `"cylinders"` - "261",
- `"heads"` - "255",
- `"sectors_per_track"` - "63"
"disk": "/dev/mapper/centos-swap",
"cylinders": "261",
"heads": "255",
"sectors_per_track": "63"
}
]
@ -228,16 +227,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,67 +7,66 @@ jc - JSON CLI output utility `/etc/shadow` file parser
Usage (cli):
$ sudo cat /etc/shadow | jc --shadow
$ sudo cat /etc/shadow | jc --shadow
Usage (module):
import jc
result = jc.parse('shadow', shadow_file_output)
import jc
result = jc.parse('shadow', shadow_file_output)
or
or
import jc.parsers.shadow
result = jc.parsers.shadow.parse(shadow_file_output)
import jc.parsers.shadow
result = jc.parsers.shadow.parse(shadow_file_output)
Schema:
[
{
"username": string,
"password": string,
"last_changed": integer,
"minimum": integer,
"maximum": integer,
"warn": integer,
"inactive": integer,
"expire": integer
}
]
**Examples**:
[
{
"username": string,
"password": string,
"last_changed": integer,
"minimum": integer,
"maximum": integer,
"warn": integer,
"inactive": integer,
"expire": integer
}
]
Examples:
$ sudo cat /etc/shadow | jc --shadow -p
[
{
- `"username"` - "root",
- `"password"` - "*",
- `"last_changed"` - 18113,
- `"minimum"` - 0,
- `"maximum"` - 99999,
- `"warn"` - 7,
- `"inactive"` - null,
- `"expire"` - null
"username": "root",
"password": "*",
"last_changed": 18113,
"minimum": 0,
"maximum": 99999,
"warn": 7,
"inactive": null,
"expire": null
},
{
- `"username"` - "daemon",
- `"password"` - "*",
- `"last_changed"` - 18113,
- `"minimum"` - 0,
- `"maximum"` - 99999,
- `"warn"` - 7,
- `"inactive"` - null,
- `"expire"` - null
"username": "daemon",
"password": "*",
"last_changed": 18113,
"minimum": 0,
"maximum": 99999,
"warn": 7,
"inactive": null,
"expire": null
},
{
- `"username"` - "bin",
- `"password"` - "*",
- `"last_changed"` - 18113,
- `"minimum"` - 0,
- `"maximum"` - 99999,
- `"warn"` - 7,
- `"inactive"` - null,
- `"expire"` - null
"username": "bin",
"password": "*",
"last_changed": 18113,
"minimum": 0,
"maximum": 99999,
"warn": 7,
"inactive": null,
"expire": null
},
...
]
@ -75,34 +74,34 @@ Schema:
$ sudo cat /etc/shadow | jc --shadow -p -r
[
{
- `"username"` - "root",
- `"password"` - "*",
- `"last_changed"` - "18113",
- `"minimum"` - "0",
- `"maximum"` - "99999",
- `"warn"` - "7",
- `"inactive"` - "",
- `"expire"` - ""
"username": "root",
"password": "*",
"last_changed": "18113",
"minimum": "0",
"maximum": "99999",
"warn": "7",
"inactive": "",
"expire": ""
},
{
- `"username"` - "daemon",
- `"password"` - "*",
- `"last_changed"` - "18113",
- `"minimum"` - "0",
- `"maximum"` - "99999",
- `"warn"` - "7",
- `"inactive"` - "",
- `"expire"` - ""
"username": "daemon",
"password": "*",
"last_changed": "18113",
"minimum": "0",
"maximum": "99999",
"warn": "7",
"inactive": "",
"expire": ""
},
{
- `"username"` - "bin",
- `"password"` - "*",
- `"last_changed"` - "18113",
- `"minimum"` - "0",
- `"maximum"` - "99999",
- `"warn"` - "7",
- `"inactive"` - "",
- `"expire"` - ""
"username": "bin",
"password": "*",
"last_changed": "18113",
"minimum": "0",
"maximum": "99999",
"warn": "7",
"inactive": "",
"expire": ""
},
...
]
@ -127,16 +126,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -10,279 +10,278 @@ parsing irregularities.
Usage (cli):
$ ss | jc --ss
$ ss | jc --ss
or
or
$ jc ss
$ jc ss
Usage (module):
import jc
result = jc.parse('ss', ss_command_output)
import jc
result = jc.parse('ss', ss_command_output)
or
or
import jc.parsers.ss
result = jc.parsers.ss.parse(ss_command_output)
import jc.parsers.ss
result = jc.parsers.ss.parse(ss_command_output)
Schema:
Information from https://www.cyberciti.biz/files/ss.html used to define
field names
Information from https://www.cyberciti.biz/files/ss.html used to define
field names
[
{
"netid": string,
"state": string,
"recv_q": integer,
"send_q": integer,
"local_address": string,
"local_port": string,
"local_port_num": integer,
"peer_address": string,
"peer_port": string,
"peer_port_num": integer,
"interface": string,
"link_layer" string,
"channel": string,
"path": string,
"pid": integer
}
]
**Examples**:
[
{
"netid": string,
"state": string,
"recv_q": integer,
"send_q": integer,
"local_address": string,
"local_port": string,
"local_port_num": integer,
"peer_address": string,
"peer_port": string,
"peer_port_num": integer,
"interface": string,
"link_layer" string,
"channel": string,
"path": string,
"pid": integer
}
]
Examples:
$ sudo ss -a | jc --ss -p
[
{
- `"netid"` - "nl",
- `"state"` - "UNCONN",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"peer_address"` - "*",
- `"channel"` - "rtnl:kernel"
"netid": "nl",
"state": "UNCONN",
"recv_q": 0,
"send_q": 0,
"peer_address": "*",
"channel": "rtnl:kernel"
},
{
- `"netid"` - "nl",
- `"state"` - "UNCONN",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"peer_address"` - "*",
- `"pid"` - 893,
- `"channel"` - "rtnl:systemd-resolve"
"netid": "nl",
"state": "UNCONN",
"recv_q": 0,
"send_q": 0,
"peer_address": "*",
"pid": 893,
"channel": "rtnl:systemd-resolve"
},
...
{
- `"netid"` - "p_raw",
- `"state"` - "UNCONN",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"peer_address"` - "*",
- `"link_layer"` - "LLDP",
- `"interface"` - "ens33"
"netid": "p_raw",
"state": "UNCONN",
"recv_q": 0,
"send_q": 0,
"peer_address": "*",
"link_layer": "LLDP",
"interface": "ens33"
},
{
- `"netid"` - "u_dgr",
- `"state"` - "UNCONN",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_port"` - "93066",
- `"peer_address"` - "*",
- `"peer_port"` - "0",
- `"path"` - "/run/user/1000/systemd/notify"
"netid": "u_dgr",
"state": "UNCONN",
"recv_q": 0,
"send_q": 0,
"local_port": "93066",
"peer_address": "*",
"peer_port": "0",
"path": "/run/user/1000/systemd/notify"
},
{
- `"netid"` - "u_seq",
- `"state"` - "LISTEN",
- `"recv_q"` - 0,
- `"send_q"` - 128,
- `"local_port"` - "20699",
- `"peer_address"` - "*",
- `"peer_port"` - "0",
- `"path"` - "/run/udev/control"
"netid": "u_seq",
"state": "LISTEN",
"recv_q": 0,
"send_q": 128,
"local_port": "20699",
"peer_address": "*",
"peer_port": "0",
"path": "/run/udev/control"
},
...
{
- `"netid"` - "icmp6",
- `"state"` - "UNCONN",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "*",
- `"local_port"` - "ipv6-icmp",
- `"peer_address"` - "*",
- `"peer_port"` - "*",
- `"interface"` - "ens33"
"netid": "icmp6",
"state": "UNCONN",
"recv_q": 0,
"send_q": 0,
"local_address": "*",
"local_port": "ipv6-icmp",
"peer_address": "*",
"peer_port": "*",
"interface": "ens33"
},
{
- `"netid"` - "udp",
- `"state"` - "UNCONN",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "127.0.0.53",
- `"local_port"` - "domain",
- `"peer_address"` - "0.0.0.0",
- `"peer_port"` - "*",
- `"interface"` - "lo"
"netid": "udp",
"state": "UNCONN",
"recv_q": 0,
"send_q": 0,
"local_address": "127.0.0.53",
"local_port": "domain",
"peer_address": "0.0.0.0",
"peer_port": "*",
"interface": "lo"
},
{
- `"netid"` - "tcp",
- `"state"` - "LISTEN",
- `"recv_q"` - 0,
- `"send_q"` - 128,
- `"local_address"` - "127.0.0.53",
- `"local_port"` - "domain",
- `"peer_address"` - "0.0.0.0",
- `"peer_port"` - "*",
- `"interface"` - "lo"
"netid": "tcp",
"state": "LISTEN",
"recv_q": 0,
"send_q": 128,
"local_address": "127.0.0.53",
"local_port": "domain",
"peer_address": "0.0.0.0",
"peer_port": "*",
"interface": "lo"
},
{
- `"netid"` - "tcp",
- `"state"` - "LISTEN",
- `"recv_q"` - 0,
- `"send_q"` - 128,
- `"local_address"` - "0.0.0.0",
- `"local_port"` - "ssh",
- `"peer_address"` - "0.0.0.0",
- `"peer_port"` - "*"
"netid": "tcp",
"state": "LISTEN",
"recv_q": 0,
"send_q": 128,
"local_address": "0.0.0.0",
"local_port": "ssh",
"peer_address": "0.0.0.0",
"peer_port": "*"
},
{
- `"netid"` - "tcp",
- `"state"` - "LISTEN",
- `"recv_q"` - 0,
- `"send_q"` - 128,
- `"local_address"` - "[::]",
- `"local_port"` - "ssh",
- `"peer_address"` - "[::]",
- `"peer_port"` - "*"
"netid": "tcp",
"state": "LISTEN",
"recv_q": 0,
"send_q": 128,
"local_address": "[::]",
"local_port": "ssh",
"peer_address": "[::]",
"peer_port": "*"
},
{
- `"netid"` - "v_str",
- `"state"` - "ESTAB",
- `"recv_q"` - 0,
- `"send_q"` - 0,
- `"local_address"` - "999900439",
- `"local_port"` - "1023",
- `"peer_address"` - "0",
- `"peer_port"` - "976",
- `"local_port_num"` - 1023,
- `"peer_port_num"` - 976
"netid": "v_str",
"state": "ESTAB",
"recv_q": 0,
"send_q": 0,
"local_address": "999900439",
"local_port": "1023",
"peer_address": "0",
"peer_port": "976",
"local_port_num": 1023,
"peer_port_num": 976
}
]
$ sudo ss -a | jc --ss -p -r
[
{
- `"netid"` - "nl",
- `"state"` - "UNCONN",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"peer_address"` - "*",
- `"channel"` - "rtnl:kernel"
"netid": "nl",
"state": "UNCONN",
"recv_q": "0",
"send_q": "0",
"peer_address": "*",
"channel": "rtnl:kernel"
},
{
- `"netid"` - "nl",
- `"state"` - "UNCONN",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"peer_address"` - "*",
- `"pid"` - "893",
- `"channel"` - "rtnl:systemd-resolve"
"netid": "nl",
"state": "UNCONN",
"recv_q": "0",
"send_q": "0",
"peer_address": "*",
"pid": "893",
"channel": "rtnl:systemd-resolve"
},
...
{
- `"netid"` - "p_raw",
- `"state"` - "UNCONN",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"peer_address"` - "*",
- `"link_layer"` - "LLDP",
- `"interface"` - "ens33"
"netid": "p_raw",
"state": "UNCONN",
"recv_q": "0",
"send_q": "0",
"peer_address": "*",
"link_layer": "LLDP",
"interface": "ens33"
},
{
- `"netid"` - "u_dgr",
- `"state"` - "UNCONN",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"local_port"` - "93066",
- `"peer_address"` - "*",
- `"peer_port"` - "0",
- `"path"` - "/run/user/1000/systemd/notify"
"netid": "u_dgr",
"state": "UNCONN",
"recv_q": "0",
"send_q": "0",
"local_port": "93066",
"peer_address": "*",
"peer_port": "0",
"path": "/run/user/1000/systemd/notify"
},
{
- `"netid"` - "u_seq",
- `"state"` - "LISTEN",
- `"recv_q"` - "0",
- `"send_q"` - "128",
- `"local_port"` - "20699",
- `"peer_address"` - "*",
- `"peer_port"` - "0",
- `"path"` - "/run/udev/control"
"netid": "u_seq",
"state": "LISTEN",
"recv_q": "0",
"send_q": "128",
"local_port": "20699",
"peer_address": "*",
"peer_port": "0",
"path": "/run/udev/control"
},
...
{
- `"netid"` - "icmp6",
- `"state"` - "UNCONN",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"local_address"` - "*",
- `"local_port"` - "ipv6-icmp",
- `"peer_address"` - "*",
- `"peer_port"` - "*",
- `"interface"` - "ens33"
"netid": "icmp6",
"state": "UNCONN",
"recv_q": "0",
"send_q": "0",
"local_address": "*",
"local_port": "ipv6-icmp",
"peer_address": "*",
"peer_port": "*",
"interface": "ens33"
},
{
- `"netid"` - "udp",
- `"state"` - "UNCONN",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"local_address"` - "127.0.0.53",
- `"local_port"` - "domain",
- `"peer_address"` - "0.0.0.0",
- `"peer_port"` - "*",
- `"interface"` - "lo"
"netid": "udp",
"state": "UNCONN",
"recv_q": "0",
"send_q": "0",
"local_address": "127.0.0.53",
"local_port": "domain",
"peer_address": "0.0.0.0",
"peer_port": "*",
"interface": "lo"
},
{
- `"netid"` - "tcp",
- `"state"` - "LISTEN",
- `"recv_q"` - "0",
- `"send_q"` - "128",
- `"local_address"` - "127.0.0.53",
- `"local_port"` - "domain",
- `"peer_address"` - "0.0.0.0",
- `"peer_port"` - "*",
- `"interface"` - "lo"
"netid": "tcp",
"state": "LISTEN",
"recv_q": "0",
"send_q": "128",
"local_address": "127.0.0.53",
"local_port": "domain",
"peer_address": "0.0.0.0",
"peer_port": "*",
"interface": "lo"
},
{
- `"netid"` - "tcp",
- `"state"` - "LISTEN",
- `"recv_q"` - "0",
- `"send_q"` - "128",
- `"local_address"` - "0.0.0.0",
- `"local_port"` - "ssh",
- `"peer_address"` - "0.0.0.0",
- `"peer_port"` - "*"
"netid": "tcp",
"state": "LISTEN",
"recv_q": "0",
"send_q": "128",
"local_address": "0.0.0.0",
"local_port": "ssh",
"peer_address": "0.0.0.0",
"peer_port": "*"
},
{
- `"netid"` - "tcp",
- `"state"` - "LISTEN",
- `"recv_q"` - "0",
- `"send_q"` - "128",
- `"local_address"` - "[::]",
- `"local_port"` - "ssh",
- `"peer_address"` - "[::]",
- `"peer_port"` - "*"
"netid": "tcp",
"state": "LISTEN",
"recv_q": "0",
"send_q": "128",
"local_address": "[::]",
"local_port": "ssh",
"peer_address": "[::]",
"peer_port": "*"
},
{
- `"netid"` - "v_str",
- `"state"` - "ESTAB",
- `"recv_q"` - "0",
- `"send_q"` - "0",
- `"local_address"` - "999900439",
- `"local_port"` - "1023",
- `"peer_address"` - "0",
- `"peer_port"` - "976"
"netid": "v_str",
"state": "ESTAB",
"recv_q": "0",
"send_q": "0",
"local_address": "999900439",
"local_port": "1023",
"peer_address": "0",
"peer_port": "976"
}
]
@ -306,16 +305,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -13,120 +13,119 @@ only available if the timezone field is UTC.
Usage (cli):
$ stat * | jc --stat
$ stat * | jc --stat
or
or
$ jc stat *
$ jc stat *
Usage (module):
import jc
result = jc.parse('stat', stat_command_output)
import jc
result = jc.parse('stat', stat_command_output)
or
or
import jc.parsers.stat
result = jc.parsers.stat.parse(stat_command_output)
import jc.parsers.stat
result = jc.parsers.stat.parse(stat_command_output)
Schema:
[
{
"file": string,
"link_to" string,
"size": integer,
"blocks": integer,
"io_blocks": integer,
"type": string,
"device": string,
"inode": integer,
"links": integer,
"access": string,
"flags": string,
"uid": integer,
"user": string,
"gid": integer,
"group": string,
"access_time": string, # - = null
"access_time_epoch": integer, # naive timestamp
"access_time_epoch_utc": integer, # timezone-aware timestamp
"modify_time": string, # - = null
"modify_time_epoch": integer, # naive timestamp
"modify_time_epoch_utc": integer, # timezone-aware timestamp
"change_time": string, # - = null
"change_time_epoch": integer, # naive timestamp
"change_time_epoch_utc": integer, # timezone-aware timestamp
"birth_time": string, # - = null
"birth_time_epoch": integer, # naive timestamp
"birth_time_epoch_utc": integer, # timezone-aware timestamp
"unix_device": integer,
"rdev": integer,
"block_size": integer,
"unix_flags": string
}
]
**Examples**:
[
{
"file": string,
"link_to" string,
"size": integer,
"blocks": integer,
"io_blocks": integer,
"type": string,
"device": string,
"inode": integer,
"links": integer,
"access": string,
"flags": string,
"uid": integer,
"user": string,
"gid": integer,
"group": string,
"access_time": string, # - = null
"access_time_epoch": integer, # naive timestamp
"access_time_epoch_utc": integer, # timezone-aware timestamp
"modify_time": string, # - = null
"modify_time_epoch": integer, # naive timestamp
"modify_time_epoch_utc": integer, # timezone-aware timestamp
"change_time": string, # - = null
"change_time_epoch": integer, # naive timestamp
"change_time_epoch_utc": integer, # timezone-aware timestamp
"birth_time": string, # - = null
"birth_time_epoch": integer, # naive timestamp
"birth_time_epoch_utc": integer, # timezone-aware timestamp
"unix_device": integer,
"rdev": integer,
"block_size": integer,
"unix_flags": string
}
]
Examples:
$ stat /bin/* | jc --stat -p
[
{
- `"file"` - "/bin/bash",
- `"size"` - 1113504,
- `"blocks"` - 2176,
- `"io_blocks"` - 4096,
- `"type"` - "regular file",
- `"device"` - "802h/2050d",
- `"inode"` - 131099,
- `"links"` - 1,
- `"access"` - "0755",
- `"flags"` - "-rwxr-xr-x",
- `"uid"` - 0,
- `"user"` - "root",
- `"gid"` - 0,
- `"group"` - "root",
- `"access_time"` - "2019-11-14 08:18:03.509681766 +0000",
- `"modify_time"` - "2019-06-06 22:28:15.000000000 +0000",
- `"change_time"` - "2019-08-12 17:21:29.521945390 +0000",
- `"birth_time"` - null,
- `"access_time_epoch"` - 1573748283,
- `"access_time_epoch_utc"` - 1573719483,
- `"modify_time_epoch"` - 1559885295,
- `"modify_time_epoch_utc"` - 1559860095,
- `"change_time_epoch"` - 1565655689,
- `"change_time_epoch_utc"` - 1565630489,
- `"birth_time_epoch"` - null,
- `"birth_time_epoch_utc"` - null
"file": "/bin/bash",
"size": 1113504,
"blocks": 2176,
"io_blocks": 4096,
"type": "regular file",
"device": "802h/2050d",
"inode": 131099,
"links": 1,
"access": "0755",
"flags": "-rwxr-xr-x",
"uid": 0,
"user": "root",
"gid": 0,
"group": "root",
"access_time": "2019-11-14 08:18:03.509681766 +0000",
"modify_time": "2019-06-06 22:28:15.000000000 +0000",
"change_time": "2019-08-12 17:21:29.521945390 +0000",
"birth_time": null,
"access_time_epoch": 1573748283,
"access_time_epoch_utc": 1573719483,
"modify_time_epoch": 1559885295,
"modify_time_epoch_utc": 1559860095,
"change_time_epoch": 1565655689,
"change_time_epoch_utc": 1565630489,
"birth_time_epoch": null,
"birth_time_epoch_utc": null
},
{
- `"file"` - "/bin/btrfs",
- `"size"` - 716464,
- `"blocks"` - 1400,
- `"io_blocks"` - 4096,
- `"type"` - "regular file",
- `"device"` - "802h/2050d",
- `"inode"` - 131100,
- `"links"` - 1,
- `"access"` - "0755",
- `"flags"` - "-rwxr-xr-x",
- `"uid"` - 0,
- `"user"` - "root",
- `"gid"` - 0,
- `"group"` - "root",
- `"access_time"` - "2019-11-14 08:18:28.990834276 +0000",
- `"modify_time"` - "2018-03-12 23:04:27.000000000 +0000",
- `"change_time"` - "2019-08-12 17:21:29.545944399 +0000",
- `"birth_time"` - null,
- `"access_time_epoch"` - 1573748308,
- `"access_time_epoch_utc"` - 1573719508,
- `"modify_time_epoch"` - 1520921067,
- `"modify_time_epoch_utc"` - 1520895867,
- `"change_time_epoch"` - 1565655689,
- `"change_time_epoch_utc"` - 1565630489,
- `"birth_time_epoch"` - null,
- `"birth_time_epoch_utc"` - null
"file": "/bin/btrfs",
"size": 716464,
"blocks": 1400,
"io_blocks": 4096,
"type": "regular file",
"device": "802h/2050d",
"inode": 131100,
"links": 1,
"access": "0755",
"flags": "-rwxr-xr-x",
"uid": 0,
"user": "root",
"gid": 0,
"group": "root",
"access_time": "2019-11-14 08:18:28.990834276 +0000",
"modify_time": "2018-03-12 23:04:27.000000000 +0000",
"change_time": "2019-08-12 17:21:29.545944399 +0000",
"birth_time": null,
"access_time_epoch": 1573748308,
"access_time_epoch_utc": 1573719508,
"modify_time_epoch": 1520921067,
"modify_time_epoch_utc": 1520895867,
"change_time_epoch": 1565655689,
"change_time_epoch_utc": 1565630489,
"birth_time_epoch": null,
"birth_time_epoch_utc": null
},
...
]
@ -134,44 +133,44 @@ Schema:
$ stat /bin/* | jc --stat -p -r
[
{
- `"file"` - "/bin/bash",
- `"size"` - "1113504",
- `"blocks"` - "2176",
- `"io_blocks"` - "4096",
- `"type"` - "regular file",
- `"device"` - "802h/2050d",
- `"inode"` - "131099",
- `"links"` - "1",
- `"access"` - "0755",
- `"flags"` - "-rwxr-xr-x",
- `"uid"` - "0",
- `"user"` - "root",
- `"gid"` - "0",
- `"group"` - "root",
- `"access_time"` - "2019-11-14 08:18:03.509681766 +0000",
- `"modify_time"` - "2019-06-06 22:28:15.000000000 +0000",
- `"change_time"` - "2019-08-12 17:21:29.521945390 +0000",
- `"birth_time"` - null
"file": "/bin/bash",
"size": "1113504",
"blocks": "2176",
"io_blocks": "4096",
"type": "regular file",
"device": "802h/2050d",
"inode": "131099",
"links": "1",
"access": "0755",
"flags": "-rwxr-xr-x",
"uid": "0",
"user": "root",
"gid": "0",
"group": "root",
"access_time": "2019-11-14 08:18:03.509681766 +0000",
"modify_time": "2019-06-06 22:28:15.000000000 +0000",
"change_time": "2019-08-12 17:21:29.521945390 +0000",
"birth_time": null
},
{
- `"file"` - "/bin/btrfs",
- `"size"` - "716464",
- `"blocks"` - "1400",
- `"io_blocks"` - "4096",
- `"type"` - "regular file",
- `"device"` - "802h/2050d",
- `"inode"` - "131100",
- `"links"` - "1",
- `"access"` - "0755",
- `"flags"` - "-rwxr-xr-x",
- `"uid"` - "0",
- `"user"` - "root",
- `"gid"` - "0",
- `"group"` - "root",
- `"access_time"` - "2019-11-14 08:18:28.990834276 +0000",
- `"modify_time"` - "2018-03-12 23:04:27.000000000 +0000",
- `"change_time"` - "2019-08-12 17:21:29.545944399 +0000",
- `"birth_time"` - null
"file": "/bin/btrfs",
"size": "716464",
"blocks": "1400",
"io_blocks": "4096",
"type": "regular file",
"device": "802h/2050d",
"inode": "131100",
"links": "1",
"access": "0755",
"flags": "-rwxr-xr-x",
"uid": "0",
"user": "root",
"gid": "0",
"group": "root",
"access_time": "2019-11-14 08:18:28.990834276 +0000",
"modify_time": "2018-03-12 23:04:27.000000000 +0000",
"change_time": "2019-08-12 17:21:29.545944399 +0000",
"birth_time": null
},
...
]
@ -196,16 +195,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -15,71 +15,70 @@ only available if the timezone field is UTC.
Usage (cli):
$ stat * | jc --stat-s
$ stat * | jc --stat-s
Usage (module):
import jc
# result is an iterable object (generator)
result = jc.parse('stat_s', stat_command_output.splitlines())
for item in result:
# do something
import jc
# result is an iterable object (generator)
result = jc.parse('stat_s', stat_command_output.splitlines())
for item in result:
# do something
or
or
import jc.parsers.stat_s
# result is an iterable object (generator)
result = jc.parsers.stat_s.parse(stat_command_output.splitlines())
for item in result:
# do something
import jc.parsers.stat_s
# result is an iterable object (generator)
result = jc.parsers.stat_s.parse(stat_command_output.splitlines())
for item in result:
# do something
Schema:
{
"file": string,
"link_to" string,
"size": integer,
"blocks": integer,
"io_blocks": integer,
"type": string,
"device": string,
"inode": integer,
"links": integer,
"access": string,
"flags": string,
"uid": integer,
"user": string,
"gid": integer,
"group": string,
"access_time": string, # - = null
"access_time_epoch": integer, # naive timestamp
"access_time_epoch_utc": integer, # timezone-aware timestamp
"modify_time": string, # - = null
"modify_time_epoch": integer, # naive timestamp
"modify_time_epoch_utc": integer, # timezone-aware timestamp
"change_time": string, # - = null
"change_time_epoch": integer, # naive timestamp
"change_time_epoch_utc": integer, # timezone-aware timestamp
"birth_time": string, # - = null
"birth_time_epoch": integer, # naive timestamp
"birth_time_epoch_utc": integer, # timezone-aware timestamp
"unix_device": integer,
"rdev": integer,
"block_size": integer,
"unix_flags": string,
{
"file": string,
"link_to" string,
"size": integer,
"blocks": integer,
"io_blocks": integer,
"type": string,
"device": string,
"inode": integer,
"links": integer,
"access": string,
"flags": string,
"uid": integer,
"user": string,
"gid": integer,
"group": string,
"access_time": string, # - = null
"access_time_epoch": integer, # naive timestamp
"access_time_epoch_utc": integer, # timezone-aware timestamp
"modify_time": string, # - = null
"modify_time_epoch": integer, # naive timestamp
"modify_time_epoch_utc": integer, # timezone-aware timestamp
"change_time": string, # - = null
"change_time_epoch": integer, # naive timestamp
"change_time_epoch_utc": integer, # timezone-aware timestamp
"birth_time": string, # - = null
"birth_time_epoch": integer, # naive timestamp
"birth_time_epoch_utc": integer, # timezone-aware timestamp
"unix_device": integer,
"rdev": integer,
"block_size": integer,
"unix_flags": string,
# Below object only exists if using -qq or ignore_exceptions=True
# Below object only exists if using -qq or ignore_exceptions=True
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
**Examples**:
"_jc_meta":
{
"success": boolean, # false if error parsing
"error": string, # exists if "success" is false
"line": string # exists if "success" is false
}
}
Examples:
$ stat | jc --stat-s
{"file":"(stdin)","unix_device":1027739696,"inode":1155,"flags":"cr...}
@ -107,25 +106,20 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False)
Main text parsing generator function. Returns an iterator object.
**Arguments**:
Parameters:
- `data` - (iterable) line-based text data to parse
data: (iterable) line-based text data to parse
(e.g. sys.stdin or str.splitlines())
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
**Yields**:
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
Yields:
Dictionary. Raw or processed structured data.
**Returns**:
Returns:
Iterator object

View File

@ -6,60 +6,59 @@
jc - JSON CLI output utility `sysctl -a` command output parser
Note: Since `sysctl` output is not easily parsable only a very simple
key/value object will be output. An attempt is made to convert obvious
integers and floats. If no conversion is desired, use the `-r`
command-line argument or the `raw=True` argument in `parse()`.
key/value object will be output. An attempt is made to convert obvious
integers and floats. If no conversion is desired, use the `-r`
command-line argument or the `raw=True` argument in `parse()`.
Usage (cli):
$ sysctl -a | jc --sysctl
$ sysctl -a | jc --sysctl
or
or
$ jc sysctl -a
$ jc sysctl -a
Usage (module):
import jc
result = jc.parse('sysctl', sysctl_command_output)
import jc
result = jc.parse('sysctl', sysctl_command_output)
or
or
import jc.parsers.sysctl
result = jc.parsers.sysctl.parse(sysctl_command_output)
import jc.parsers.sysctl
result = jc.parsers.sysctl.parse(sysctl_command_output)
Schema:
{
"key1": string/integer/float, # best guess based on value
"key2": string/integer/float,
"key3": string/integer/float
}
**Examples**:
{
"key1": string/integer/float, # best guess based on value
"key2": string/integer/float,
"key3": string/integer/float
}
Examples:
$ sysctl -a | jc --sysctl -p
{
- `"user.cs_path"` - "/usr/bin:/bin:/usr/sbin:/sbin",
- `"user.bc_base_max"` - 99,
- `"user.bc_dim_max"` - 2048,
- `"user.bc_scale_max"` - 99,
- `"user.bc_string_max"` - 1000,
- `"user.coll_weights_max"` - 2,
- `"user.expr_nest_max"` - 32
"user.cs_path": "/usr/bin:/bin:/usr/sbin:/sbin",
"user.bc_base_max": 99,
"user.bc_dim_max": 2048,
"user.bc_scale_max": 99,
"user.bc_string_max": 1000,
"user.coll_weights_max": 2,
"user.expr_nest_max": 32
...
}
$ sysctl -a | jc --sysctl -p -r
{
- `"user.cs_path"` - "/usr/bin:/bin:/usr/sbin:/sbin",
- `"user.bc_base_max"` - "99",
- `"user.bc_dim_max"` - "2048",
- `"user.bc_scale_max"` - "99",
- `"user.bc_string_max"` - "1000",
- `"user.coll_weights_max"` - "2",
- `"user.expr_nest_max"` - "32",
"user.cs_path": "/usr/bin:/bin:/usr/sbin:/sbin",
"user.bc_base_max": "99",
"user.bc_dim_max": "2048",
"user.bc_scale_max": "99",
"user.bc_string_max": "1000",
"user.coll_weights_max": "2",
"user.expr_nest_max": "32",
...
}
@ -83,16 +82,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -7,59 +7,58 @@ jc - JSON CLI output utility `systemctl` command output parser
Usage (cli):
$ systemctl | jc --systemctl
$ systemctl | jc --systemctl
or
or
$ jc systemctl
$ jc systemctl
Usage (module):
import jc
result = jc.parse('systemctl', systemctl_command_output)
import jc
result = jc.parse('systemctl', systemctl_command_output)
or
or
import jc.parsers.systemctl
result = jc.parsers.systemctl.parse(systemctl_command_output)
import jc.parsers.systemctl
result = jc.parsers.systemctl.parse(systemctl_command_output)
Schema:
[
{
"unit": string,
"load": string,
"active": string,
"sub": string,
"description": string
}
]
**Examples**:
[
{
"unit": string,
"load": string,
"active": string,
"sub": string,
"description": string
}
]
Examples:
$ systemctl -a | jc --systemctl -p
[
{
- `"unit"` - "proc-sys-fs-binfmt_misc.automount",
- `"load"` - "loaded",
- `"active"` - "active",
- `"sub"` - "waiting",
- `"description"` - "Arbitrary Executable File Formats File System ..."
"unit": "proc-sys-fs-binfmt_misc.automount",
"load": "loaded",
"active": "active",
"sub": "waiting",
"description": "Arbitrary Executable File Formats File System ..."
},
{
- `"unit"` - "dev-block-8:2.device",
- `"load"` - "loaded",
- `"active"` - "active",
- `"sub"` - "plugged",
- `"description"` - "LVM PV 3klkIj-w1qk-DkJi-0XBJ-y3o7-i2Ac-vHqWBM o..."
"unit": "dev-block-8:2.device",
"load": "loaded",
"active": "active",
"sub": "plugged",
"description": "LVM PV 3klkIj-w1qk-DkJi-0XBJ-y3o7-i2Ac-vHqWBM o..."
},
{
- `"unit"` - "dev-cdrom.device",
- `"load"` - "loaded",
- `"active"` - "active",
- `"sub"` - "plugged",
- `"description"` - "VMware_Virtual_IDE_CDROM_Drive"
"unit": "dev-cdrom.device",
"load": "loaded",
"active": "active",
"sub": "plugged",
"description": "VMware_Virtual_IDE_CDROM_Drive"
},
...
]
@ -84,16 +83,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,77 +7,76 @@ jc - JSON CLI output utility `systemctl list-jobs` command output parser
Usage (cli):
$ systemctl list-jobs | jc --systemctl-lj
$ systemctl list-jobs | jc --systemctl-lj
or
or
$ jc systemctl list-jobs
$ jc systemctl list-jobs
Usage (module):
import jc
result = jc.parse('systemctl_lj', systemctl_lj_command_output)
import jc
result = jc.parse('systemctl_lj', systemctl_lj_command_output)
or
or
import jc.parsers.systemctl_lj
result = jc.parsers.systemctl_lj.parse(systemctl_lj_command_output)
import jc.parsers.systemctl_lj
result = jc.parsers.systemctl_lj.parse(systemctl_lj_command_output)
Schema:
[
{
"job": integer,
"unit": string,
"type": string,
"state": string
}
]
**Examples**:
[
{
"job": integer,
"unit": string,
"type": string,
"state": string
}
]
Examples:
$ systemctl list-jobs| jc --systemctl-lj -p
[
{
- `"job"` - 3543,
- `"unit"` - "nginxAfterGlusterfs.service",
- `"type"` - "start",
- `"state"` - "waiting"
"job": 3543,
"unit": "nginxAfterGlusterfs.service",
"type": "start",
"state": "waiting"
},
{
- `"job"` - 3545,
- `"unit"` - "glusterReadyForLocalhostMount.service",
- `"type"` - "start",
- `"state"` - "running"
"job": 3545,
"unit": "glusterReadyForLocalhostMount.service",
"type": "start",
"state": "running"
},
{
- `"job"` - 3506,
- `"unit"` - "nginx.service",
- `"type"` - "start",
- `"state"` - "waiting"
"job": 3506,
"unit": "nginx.service",
"type": "start",
"state": "waiting"
}
]
$ systemctl list-jobs| jc --systemctl-lj -p -r
[
{
- `"job"` - "3543",
- `"unit"` - "nginxAfterGlusterfs.service",
- `"type"` - "start",
- `"state"` - "waiting"
"job": "3543",
"unit": "nginxAfterGlusterfs.service",
"type": "start",
"state": "waiting"
},
{
- `"job"` - "3545",
- `"unit"` - "glusterReadyForLocalhostMount.service",
- `"type"` - "start",
- `"state"` - "running"
"job": "3545",
"unit": "glusterReadyForLocalhostMount.service",
"type": "start",
"state": "running"
},
{
- `"job"` - "3506",
- `"unit"` - "nginx.service",
- `"type"` - "start",
- `"state"` - "waiting"
"job": "3506",
"unit": "nginx.service",
"type": "start",
"state": "waiting"
}
]
@ -101,16 +100,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -8,51 +8,50 @@ parser
Usage (cli):
$ systemctl list-sockets | jc --systemctl-ls
$ systemctl list-sockets | jc --systemctl-ls
or
or
$ jc systemctl list-sockets
$ jc systemctl list-sockets
Usage (module):
import jc
result = jc.parse('systemctl_ls', systemctl_ls_command_output)
import jc
result = jc.parse('systemctl_ls', systemctl_ls_command_output)
or
or
import jc.parsers.systemctl_ls
result = jc.parsers.systemctl_ls.parse(systemctl_ls_command_output)
import jc.parsers.systemctl_ls
result = jc.parsers.systemctl_ls.parse(systemctl_ls_command_output)
Schema:
[
{
"listen": string,
"unit": string,
"activates": string
}
]
**Examples**:
[
{
"listen": string,
"unit": string,
"activates": string
}
]
Examples:
$ systemctl list-sockets | jc --systemctl-ls -p
[
{
- `"listen"` - "/dev/log",
- `"unit"` - "systemd-journald.socket",
- `"activates"` - "systemd-journald.service"
"listen": "/dev/log",
"unit": "systemd-journald.socket",
"activates": "systemd-journald.service"
},
{
- `"listen"` - "/run/dbus/system_bus_socket",
- `"unit"` - "dbus.socket",
- `"activates"` - "dbus.service"
"listen": "/run/dbus/system_bus_socket",
"unit": "dbus.socket",
"activates": "dbus.service"
},
{
- `"listen"` - "/run/dmeventd-client",
- `"unit"` - "dm-event.socket",
- `"activates"` - "dm-event.service"
"listen": "/run/dmeventd-client",
"unit": "dm-event.socket",
"activates": "dm-event.service"
},
...
]
@ -77,16 +76,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -8,47 +8,46 @@ parser
Usage (cli):
$ systemctl list-unit-files | jc --systemctl-luf
$ systemctl list-unit-files | jc --systemctl-luf
or
or
$ jc systemctl list-unit-files
$ jc systemctl list-unit-files
Usage (module):
import jc
result = jc.parse('systemctl_luf', systemctl_luf_command_output)
import jc
result = jc.parse('systemctl_luf', systemctl_luf_command_output)
or
or
import jc.parsers.systemctl_luf
result = jc.parsers.systemctl_luf.parse(systemctl_luf_command_output)
import jc.parsers.systemctl_luf
result = jc.parsers.systemctl_luf.parse(systemctl_luf_command_output)
Schema:
[
{
"unit_file": string,
"state": string
}
]
**Examples**:
[
{
"unit_file": string,
"state": string
}
]
Examples:
$ systemctl list-unit-files | jc --systemctl-luf -p
[
{
- `"unit_file"` - "proc-sys-fs-binfmt_misc.automount",
- `"state"` - "static"
"unit_file": "proc-sys-fs-binfmt_misc.automount",
"state": "static"
},
{
- `"unit_file"` - "dev-hugepages.mount",
- `"state"` - "static"
"unit_file": "dev-hugepages.mount",
"state": "static"
},
{
- `"unit_file"` - "dev-mqueue.mount",
- `"state"` - "static"
"unit_file": "dev-mqueue.mount",
"state": "static"
},
...
]
@ -73,16 +72,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -17,203 +17,202 @@ the timezone field is UTC.
Usage (cli):
$ systeminfo | jc --systeminfo
$ systeminfo | jc --systeminfo
Usage (module):
import jc
result = jc.parse('systeminfo', systeminfo_command_output)
import jc
result = jc.parse('systeminfo', systeminfo_command_output)
or
or
import jc.parsers.systeminfo
result = jc.parsers.systeminfo.parse(systeminfo_command_output)
import jc.parsers.systeminfo
result = jc.parsers.systeminfo.parse(systeminfo_command_output)
Schema:
{
"host_name": string,
"os_name": string,
"os_version": string,
"os_manufacturer": string,
"os_configuration": string,
"os_build_type": string,
"registered_owner": string,
"registered_organization": string,
"product_id": string,
"original_install_date": string,
"original_install_date_epoch": integer, # [0]
"original_install_date_epoch_utc": integer, # [1]
"system_boot_time": string,
"system_boot_time_epoch": integer, # [0]
"system_boot_time_epoch_utc": integer, # [1]
"system_manufacturer": string,
"system_model": string,
"system_type": string,
"processors": [
string
],
"bios_version": string,
"windows_directory": string,
"system_directory": string,
"boot_device": string,
"system_locale": string,
"input_locale": string,
"time_zone": string,
"total_physical_memory_mb": string,
"available_physical_memory_mb": integer,
"virtual_memory_max_size_mb": integer,
"virtual_memory_available_mb": integer,
"virtual_memory_in_use_mb": integer,
"page_file_locations": string,
"domain": string,
"logon_server": string,
"hotfixs": [
string
],
"network_cards": [
{
"name": string,
"connection_name": string,
"status": string,
"dhcp_enabled": boolean,
"dhcp_server": string,
"ip_addresses": [
string
]
}
],
"hyperv_requirements": {
"vm_monitor_mode_extensions": boolean,
"virtualization_enabled_in_firmware": boolean,
"second_level_address_translation": boolean,
"data_execution_prevention_available": boolean
}
}
{
"host_name": string,
"os_name": string,
"os_version": string,
"os_manufacturer": string,
"os_configuration": string,
"os_build_type": string,
"registered_owner": string,
"registered_organization": string,
"product_id": string,
"original_install_date": string,
"original_install_date_epoch": integer, # [0]
"original_install_date_epoch_utc": integer, # [1]
"system_boot_time": string,
"system_boot_time_epoch": integer, # [0]
"system_boot_time_epoch_utc": integer, # [1]
"system_manufacturer": string,
"system_model": string,
"system_type": string,
"processors": [
string
],
"bios_version": string,
"windows_directory": string,
"system_directory": string,
"boot_device": string,
"system_locale": string,
"input_locale": string,
"time_zone": string,
"total_physical_memory_mb": string,
"available_physical_memory_mb": integer,
"virtual_memory_max_size_mb": integer,
"virtual_memory_available_mb": integer,
"virtual_memory_in_use_mb": integer,
"page_file_locations": string,
"domain": string,
"logon_server": string,
"hotfixs": [
string
],
"network_cards": [
{
"name": string,
"connection_name": string,
"status": string,
"dhcp_enabled": boolean,
"dhcp_server": string,
"ip_addresses": [
string
]
}
],
"hyperv_requirements": {
"vm_monitor_mode_extensions": boolean,
"virtualization_enabled_in_firmware": boolean,
"second_level_address_translation": boolean,
"data_execution_prevention_available": boolean
}
}
[0] naive timestamp
[1] timezone-aware timestamp
**Examples**:
[0] naive timestamp
[1] timezone-aware timestamp
Examples:
$ systeminfo | jc --systeminfo -p
{
- `"host_name"` - "TESTLAPTOP",
- `"os_name"` - "Microsoft Windows 10 Enterprise",
- `"os_version"` - "10.0.17134 N/A Build 17134",
- `"os_manufacturer"` - "Microsoft Corporation",
- `"os_configuration"` - "Member Workstation",
- `"os_build_type"` - "Multiprocessor Free",
- `"registered_owner"` - "Test, Inc.",
- `"registered_organization"` - "Test, Inc.",
- `"product_id"` - "11111-11111-11111-AA111",
- `"original_install_date"` - "3/26/2019, 3:51:30 PM",
- `"system_boot_time"` - "3/30/2021, 6:13:59 AM",
- `"system_manufacturer"` - "Dell Inc.",
- `"system_model"` - "Precision 5530",
- `"system_type"` - "x64-based PC",
- `"processors"` - [
"host_name": "TESTLAPTOP",
"os_name": "Microsoft Windows 10 Enterprise",
"os_version": "10.0.17134 N/A Build 17134",
"os_manufacturer": "Microsoft Corporation",
"os_configuration": "Member Workstation",
"os_build_type": "Multiprocessor Free",
"registered_owner": "Test, Inc.",
"registered_organization": "Test, Inc.",
"product_id": "11111-11111-11111-AA111",
"original_install_date": "3/26/2019, 3:51:30 PM",
"system_boot_time": "3/30/2021, 6:13:59 AM",
"system_manufacturer": "Dell Inc.",
"system_model": "Precision 5530",
"system_type": "x64-based PC",
"processors": [
"Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz"
],
- `"bios_version"` - "Dell Inc. 1.16.2, 4/21/2020",
- `"windows_directory"` - "C:\\WINDOWS",
- `"system_directory"` - "C:\\WINDOWS\\system32",
- `"boot_device"` - "\\Device\\HarddiskVolume2",
- `"system_locale"` - "en-us;English (United States)",
- `"input_locale"` - "en-us;English (United States)",
- `"time_zone"` - "(UTC+00:00) UTC",
- `"total_physical_memory_mb"` - 32503,
- `"available_physical_memory_mb"` - 19743,
- `"virtual_memory_max_size_mb"` - 37367,
- `"virtual_memory_available_mb"` - 22266,
- `"virtual_memory_in_use_mb"` - 15101,
- `"page_file_locations"` - "C:\\pagefile.sys",
- `"domain"` - "test.com",
- `"logon_server"` - "\\\\TESTDC01",
- `"hotfixs"` - [
"bios_version": "Dell Inc. 1.16.2, 4/21/2020",
"windows_directory": "C:\\WINDOWS",
"system_directory": "C:\\WINDOWS\\system32",
"boot_device": "\\Device\\HarddiskVolume2",
"system_locale": "en-us;English (United States)",
"input_locale": "en-us;English (United States)",
"time_zone": "(UTC+00:00) UTC",
"total_physical_memory_mb": 32503,
"available_physical_memory_mb": 19743,
"virtual_memory_max_size_mb": 37367,
"virtual_memory_available_mb": 22266,
"virtual_memory_in_use_mb": 15101,
"page_file_locations": "C:\\pagefile.sys",
"domain": "test.com",
"logon_server": "\\\\TESTDC01",
"hotfixs": [
"KB2693643",
"KB4601054"
],
- `"network_cards"` - [
"network_cards": [
{
- `"name"` - "Intel(R) Wireless-AC 9260 160MHz",
- `"connection_name"` - "Wi-Fi",
- `"status"` - null,
- `"dhcp_enabled"` - true,
- `"dhcp_server"` - "192.168.2.1",
- `"ip_addresses"` - [
"name": "Intel(R) Wireless-AC 9260 160MHz",
"connection_name": "Wi-Fi",
"status": null,
"dhcp_enabled": true,
"dhcp_server": "192.168.2.1",
"ip_addresses": [
"192.168.2.219"
]
}
],
- `"hyperv_requirements"` - {
- `"vm_monitor_mode_extensions"` - true,
- `"virtualization_enabled_in_firmware"` - true,
- `"second_level_address_translation"` - false,
- `"data_execution_prevention_available"` - true
"hyperv_requirements": {
"vm_monitor_mode_extensions": true,
"virtualization_enabled_in_firmware": true,
"second_level_address_translation": false,
"data_execution_prevention_available": true
},
- `"original_install_date_epoch"` - 1553640690,
- `"original_install_date_epoch_utc"` - 1553615490,
- `"system_boot_time_epoch"` - 1617110039,
- `"system_boot_time_epoch_utc"` - 1617084839
"original_install_date_epoch": 1553640690,
"original_install_date_epoch_utc": 1553615490,
"system_boot_time_epoch": 1617110039,
"system_boot_time_epoch_utc": 1617084839
}
$ systeminfo | jc --systeminfo -p -r
{
- `"host_name"` - "TESTLAPTOP",
- `"os_name"` - "Microsoft Windows 10 Enterprise",
- `"os_version"` - "10.0.17134 N/A Build 17134",
- `"os_manufacturer"` - "Microsoft Corporation",
- `"os_configuration"` - "Member Workstation",
- `"os_build_type"` - "Multiprocessor Free",
- `"registered_owner"` - "Test, Inc.",
- `"registered_organization"` - "Test, Inc.",
- `"product_id"` - "11111-11111-11111-AA111",
- `"original_install_date"` - "3/26/2019, 3:51:30 PM",
- `"system_boot_time"` - "3/30/2021, 6:13:59 AM",
- `"system_manufacturer"` - "Dell Inc.",
- `"system_model"` - "Precision 5530",
- `"system_type"` - "x64-based PC",
- `"processors"` - [
"host_name": "TESTLAPTOP",
"os_name": "Microsoft Windows 10 Enterprise",
"os_version": "10.0.17134 N/A Build 17134",
"os_manufacturer": "Microsoft Corporation",
"os_configuration": "Member Workstation",
"os_build_type": "Multiprocessor Free",
"registered_owner": "Test, Inc.",
"registered_organization": "Test, Inc.",
"product_id": "11111-11111-11111-AA111",
"original_install_date": "3/26/2019, 3:51:30 PM",
"system_boot_time": "3/30/2021, 6:13:59 AM",
"system_manufacturer": "Dell Inc.",
"system_model": "Precision 5530",
"system_type": "x64-based PC",
"processors": [
"Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz"
],
- `"bios_version"` - "Dell Inc. 1.16.2, 4/21/2020",
- `"windows_directory"` - "C:\\WINDOWS",
- `"system_directory"` - "C:\\WINDOWS\\system32",
- `"boot_device"` - "\\Device\\HarddiskVolume2",
- `"system_locale"` - "en-us;English (United States)",
- `"input_locale"` - "en-us;English (United States)",
- `"time_zone"` - "(UTC+00:00) UTC",
- `"total_physical_memory_mb"` - "32,503 MB",
- `"available_physical_memory_mb"` - "19,743 MB",
- `"virtual_memory_max_size_mb"` - "37,367 MB",
- `"virtual_memory_available_mb"` - "22,266 MB",
- `"virtual_memory_in_use_mb"` - "15,101 MB",
- `"page_file_locations"` - "C:\\pagefile.sys",
- `"domain"` - "test.com",
- `"logon_server"` - "\\\\TESTDC01",
- `"hotfixs"` - [
"bios_version": "Dell Inc. 1.16.2, 4/21/2020",
"windows_directory": "C:\\WINDOWS",
"system_directory": "C:\\WINDOWS\\system32",
"boot_device": "\\Device\\HarddiskVolume2",
"system_locale": "en-us;English (United States)",
"input_locale": "en-us;English (United States)",
"time_zone": "(UTC+00:00) UTC",
"total_physical_memory_mb": "32,503 MB",
"available_physical_memory_mb": "19,743 MB",
"virtual_memory_max_size_mb": "37,367 MB",
"virtual_memory_available_mb": "22,266 MB",
"virtual_memory_in_use_mb": "15,101 MB",
"page_file_locations": "C:\\pagefile.sys",
"domain": "test.com",
"logon_server": "\\\\TESTDC01",
"hotfixs": [
"KB2693643",
"KB4601054"
],
- `"network_cards"` - [
"network_cards": [
{
- `"name"` - "Intel(R) Wireless-AC 9260 160MHz",
- `"connection_name"` - "Wi-Fi",
- `"status"` - "",
- `"dhcp_enabled"` - "Yes",
- `"dhcp_server"` - "192.168.2.1",
- `"ip_addresses"` - [
"name": "Intel(R) Wireless-AC 9260 160MHz",
"connection_name": "Wi-Fi",
"status": "",
"dhcp_enabled": "Yes",
"dhcp_server": "192.168.2.1",
"ip_addresses": [
"192.168.2.219"
]
}
],
- `"hyperv_requirements"` - {
- `"vm_monitor_mode_extensions"` - "Yes",
- `"virtualization_enabled_in_firmware"` - "Yes",
- `"second_level_address_translation"` - "No",
- `"data_execution_prevention_available"` - "Yes"
"hyperv_requirements": {
"vm_monitor_mode_extensions": "Yes",
"virtualization_enabled_in_firmware": "Yes",
"second_level_address_translation": "No",
"data_execution_prevention_available": "Yes"
}
}
@ -237,16 +236,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -12,130 +12,129 @@ Alternatively, the output from `/usr/bin/time` can be redirected to `STDOUT`
so `jc` can receive it.
Note: `/usr/bin/time` is similar but different from the Bash builtin
`time` command.
`time` command.
Usage (cli):
$ /usr/bin/time -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p
$ /usr/bin/time -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p
Usage (module):
import jc
result = jc.parse('time', time_command_output)
import jc
result = jc.parse('time', time_command_output)
or
or
import jc.parsers.time
result = jc.parsers.time.parse(time_command_output)
import jc.parsers.time
result = jc.parsers.time.parse(time_command_output)
Schema:
Source: https://www.freebsd.org/cgi/man.cgi?query=getrusage
https://man7.org/linux/man-pages/man1/time.1.html
Source: https://www.freebsd.org/cgi/man.cgi?query=getrusage
https://man7.org/linux/man-pages/man1/time.1.html
{
"real_time": float,
"user_time": float,
"system_time": float,
"elapsed_time": string,
"elapsed_time_hours": integer,
"elapsed_time_minutes": integer,
"elapsed_time_seconds": integer,
"elapsed_time_centiseconds": integer,
"elapsed_time_total_seconds": float,
"cpu_percent": integer, # null if ?
"average_shared_text_size": integer,
"average_unshared_data_size": integer,
"average_unshared_stack_size": integer,
"average_shared_memory_size": integer,
"maximum_resident_set_size": integer,
"block_input_operations": integer, # [0]
"block_output_operations": integer, # [1]
"major_pagefaults": integer,
"minor_pagefaults": integer,
"swaps": integer,
"page_reclaims": integer,
"page_faults": integer,
"messages_sent": integer,
"messages_received": integer,
"signals_received": integer,
"voluntary_context_switches": integer,
"involuntary_context_switches": integer
"command_being_timed": string,
"average_stack_size": integer,
"average_total_size": integer,
"average_resident_set_size": integer,
"signals_delivered": integer,
"page_size": integer,
"exit_status": integer
}
{
"real_time": float,
"user_time": float,
"system_time": float,
"elapsed_time": string,
"elapsed_time_hours": integer,
"elapsed_time_minutes": integer,
"elapsed_time_seconds": integer,
"elapsed_time_centiseconds": integer,
"elapsed_time_total_seconds": float,
"cpu_percent": integer, # null if ?
"average_shared_text_size": integer,
"average_unshared_data_size": integer,
"average_unshared_stack_size": integer,
"average_shared_memory_size": integer,
"maximum_resident_set_size": integer,
"block_input_operations": integer, # [0]
"block_output_operations": integer, # [1]
"major_pagefaults": integer,
"minor_pagefaults": integer,
"swaps": integer,
"page_reclaims": integer,
"page_faults": integer,
"messages_sent": integer,
"messages_received": integer,
"signals_received": integer,
"voluntary_context_switches": integer,
"involuntary_context_switches": integer
"command_being_timed": string,
"average_stack_size": integer,
"average_total_size": integer,
"average_resident_set_size": integer,
"signals_delivered": integer,
"page_size": integer,
"exit_status": integer
}
[0] aka File system inputs
[1] aka File system outputs
**Examples**:
[0] aka File system inputs
[1] aka File system outputs
Examples:
$ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p
{
- `"command_being_timed"` - "sleep 2",
- `"user_time"` - 0.0,
- `"system_time"` - 0.0,
- `"cpu_percent"` - 0,
- `"elapsed_time"` - "0:02.00",
- `"average_shared_text_size"` - 0,
- `"average_unshared_data_size"` - 0,
- `"average_stack_size"` - 0,
- `"average_total_size"` - 0,
- `"maximum_resident_set_size"` - 2084,
- `"average_resident_set_size"` - 0,
- `"major_pagefaults"` - 0,
- `"minor_pagefaults"` - 72,
- `"voluntary_context_switches"` - 2,
- `"involuntary_context_switches"` - 1,
- `"swaps"` - 0,
- `"block_input_operations"` - 0,
- `"block_output_operations"` - 0,
- `"messages_sent"` - 0,
- `"messages_received"` - 0,
- `"signals_delivered"` - 0,
- `"page_size"` - 4096,
- `"exit_status"` - 0,
- `"elapsed_time_hours"` - 0,
- `"elapsed_time_minutes"` - 0,
- `"elapsed_time_seconds"` - 2,
- `"elapsed_time_centiseconds"` - 50,
- `"elapsed_time_total_seconds"` - 2.5
"command_being_timed": "sleep 2",
"user_time": 0.0,
"system_time": 0.0,
"cpu_percent": 0,
"elapsed_time": "0:02.00",
"average_shared_text_size": 0,
"average_unshared_data_size": 0,
"average_stack_size": 0,
"average_total_size": 0,
"maximum_resident_set_size": 2084,
"average_resident_set_size": 0,
"major_pagefaults": 0,
"minor_pagefaults": 72,
"voluntary_context_switches": 2,
"involuntary_context_switches": 1,
"swaps": 0,
"block_input_operations": 0,
"block_output_operations": 0,
"messages_sent": 0,
"messages_received": 0,
"signals_delivered": 0,
"page_size": 4096,
"exit_status": 0,
"elapsed_time_hours": 0,
"elapsed_time_minutes": 0,
"elapsed_time_seconds": 2,
"elapsed_time_centiseconds": 50,
"elapsed_time_total_seconds": 2.5
}
$ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p -r
{
- `"command_being_timed"` - "\"sleep 2\"",
- `"user_time"` - "0.00",
- `"system_time"` - "0.00",
- `"cpu_percent"` - "0",
- `"elapsed_time"` - "0:02.00",
- `"average_shared_text_size"` - "0",
- `"average_unshared_data_size"` - "0",
- `"average_stack_size"` - "0",
- `"average_total_size"` - "0",
- `"maximum_resident_set_size"` - "2084",
- `"average_resident_set_size"` - "0",
- `"major_pagefaults"` - "0",
- `"minor_pagefaults"` - "72",
- `"voluntary_context_switches"` - "2",
- `"involuntary_context_switches"` - "0",
- `"swaps"` - "0",
- `"block_input_operations"` - "0",
- `"block_output_operations"` - "0",
- `"messages_sent"` - "0",
- `"messages_received"` - "0",
- `"signals_delivered"` - "0",
- `"page_size"` - "4096",
- `"exit_status"` - "0"
"command_being_timed": "\"sleep 2\"",
"user_time": "0.00",
"system_time": "0.00",
"cpu_percent": "0",
"elapsed_time": "0:02.00",
"average_shared_text_size": "0",
"average_unshared_data_size": "0",
"average_stack_size": "0",
"average_total_size": "0",
"maximum_resident_set_size": "2084",
"average_resident_set_size": "0",
"major_pagefaults": "0",
"minor_pagefaults": "72",
"voluntary_context_switches": "2",
"involuntary_context_switches": "0",
"swaps": "0",
"block_input_operations": "0",
"block_output_operations": "0",
"messages_sent": "0",
"messages_received": "0",
"signals_delivered": "0",
"page_size": "4096",
"exit_status": "0"
}
<a id="jc.parsers.time.info"></a>
@ -158,16 +157,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -10,64 +10,63 @@ available if the `universal_time` field is available.
Usage (cli):
$ timedatectl | jc --timedatectl
$ timedatectl | jc --timedatectl
or
or
$ jc timedatectl
$ jc timedatectl
Usage (module):
import jc
result = jc.parse('timedatectl', timedatectl_command_output)
import jc
result = jc.parse('timedatectl', timedatectl_command_output)
or
or
import jc.parsers.timedatectl
result = jc.parsers.timedatectl.parse(timedatectl_command_output)
import jc.parsers.timedatectl
result = jc.parsers.timedatectl.parse(timedatectl_command_output)
Schema:
{
"local_time": string,
"universal_time": string,
"epoch_utc": integer, # timezone-aware
"rtc_time": string,
"time_zone": string,
"ntp_enabled": boolean,
"ntp_synchronized": boolean,
"system_clock_synchronized": boolean,
"systemd-timesyncd.service_active": boolean,
"rtc_in_local_tz": boolean,
"dst_active": boolean
}
**Examples**:
{
"local_time": string,
"universal_time": string,
"epoch_utc": integer, # timezone-aware
"rtc_time": string,
"time_zone": string,
"ntp_enabled": boolean,
"ntp_synchronized": boolean,
"system_clock_synchronized": boolean,
"systemd-timesyncd.service_active": boolean,
"rtc_in_local_tz": boolean,
"dst_active": boolean
}
Examples:
$ timedatectl | jc --timedatectl -p
{
- `"local_time"` - "Tue 2020-03-10 17:53:21 PDT",
- `"universal_time"` - "Wed 2020-03-11 00:53:21 UTC",
- `"rtc_time"` - "Wed 2020-03-11 00:53:21",
- `"time_zone"` - "America/Los_Angeles (PDT, -0700)",
- `"ntp_enabled"` - true,
- `"ntp_synchronized"` - true,
- `"rtc_in_local_tz"` - false,
- `"dst_active"` - true,
- `"epoch_utc"` - 1583888001
"local_time": "Tue 2020-03-10 17:53:21 PDT",
"universal_time": "Wed 2020-03-11 00:53:21 UTC",
"rtc_time": "Wed 2020-03-11 00:53:21",
"time_zone": "America/Los_Angeles (PDT, -0700)",
"ntp_enabled": true,
"ntp_synchronized": true,
"rtc_in_local_tz": false,
"dst_active": true,
"epoch_utc": 1583888001
}
$ timedatectl | jc --timedatectl -p -r
{
- `"local_time"` - "Tue 2020-03-10 17:53:21 PDT",
- `"universal_time"` - "Wed 2020-03-11 00:53:21 UTC",
- `"rtc_time"` - "Wed 2020-03-11 00:53:21",
- `"time_zone"` - "America/Los_Angeles (PDT, -0700)",
- `"ntp_enabled"` - "yes",
- `"ntp_synchronized"` - "yes",
- `"rtc_in_local_tz"` - "no",
- `"dst_active"` - "yes"
"local_time": "Tue 2020-03-10 17:53:21 PDT",
"universal_time": "Wed 2020-03-11 00:53:21 UTC",
"rtc_time": "Wed 2020-03-11 00:53:21",
"time_zone": "America/Los_Angeles (PDT, -0700)",
"ntp_enabled": "yes",
"ntp_synchronized": "yes",
"rtc_in_local_tz": "no",
"dst_active": "yes"
}
<a id="jc.parsers.timedatectl.info"></a>
@ -90,16 +89,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -9,130 +9,129 @@ Supports `tracepath` and `tracepath6` output.
Usage (cli):
$ tracepath 1.2.3.4 | jc --tracepath
$ tracepath 1.2.3.4 | jc --tracepath
or
or
$ jc tracepath 1.2.3.4
$ jc tracepath 1.2.3.4
Usage (module):
import jc
result = jc.parse('tracepath', tracepath_command_output)
import jc
result = jc.parse('tracepath', tracepath_command_output)
or
or
import jc.parsers.tracepath
result = jc.parsers.tracepath.parse(tracepath_command_output)
import jc.parsers.tracepath
result = jc.parsers.tracepath.parse(tracepath_command_output)
Schema:
{
"pmtu": integer,
"forward_hops": integer,
"return_hops": integer,
"hops": [
{
"ttl": integer,
"guess": boolean,
"host": string,
"reply_ms": float,
"pmtu": integer,
"asymmetric_difference": integer,
"reached": boolean
}
]
}
**Examples**:
{
"pmtu": integer,
"forward_hops": integer,
"return_hops": integer,
"hops": [
{
"ttl": integer,
"guess": boolean,
"host": string,
"reply_ms": float,
"pmtu": integer,
"asymmetric_difference": integer,
"reached": boolean
}
]
}
Examples:
$ tracepath6 3ffe:2400:0:109::2 | jc --tracepath -p
{
- `"pmtu"` - 1480,
- `"forward_hops"` - 2,
- `"return_hops"` - 2,
- `"hops"` - [
"pmtu": 1480,
"forward_hops": 2,
"return_hops": 2,
"hops": [
{
- `"ttl"` - 1,
- `"guess"` - true,
- `"host"` - "[LOCALHOST]",
- `"reply_ms"` - null,
- `"pmtu"` - 1500,
- `"asymmetric_difference"` - null,
- `"reached"` - false
"ttl": 1,
"guess": true,
"host": "[LOCALHOST]",
"reply_ms": null,
"pmtu": 1500,
"asymmetric_difference": null,
"reached": false
},
{
- `"ttl"` - 1,
- `"guess"` - false,
- `"host"` - "dust.inr.ac.ru",
- `"reply_ms"` - 0.411,
- `"pmtu"` - null,
- `"asymmetric_difference"` - null,
- `"reached"` - false
"ttl": 1,
"guess": false,
"host": "dust.inr.ac.ru",
"reply_ms": 0.411,
"pmtu": null,
"asymmetric_difference": null,
"reached": false
},
{
- `"ttl"` - 2,
- `"guess"` - false,
- `"host"` - "dust.inr.ac.ru",
- `"reply_ms"` - 0.39,
- `"pmtu"` - 1480,
- `"asymmetric_difference"` - 1,
- `"reached"` - false
"ttl": 2,
"guess": false,
"host": "dust.inr.ac.ru",
"reply_ms": 0.39,
"pmtu": 1480,
"asymmetric_difference": 1,
"reached": false
},
{
- `"ttl"` - 2,
- `"guess"` - false,
- `"host"` - "3ffe:2400:0:109::2",
- `"reply_ms"` - 463.514,
- `"pmtu"` - null,
- `"asymmetric_difference"` - null,
- `"reached"` - true
"ttl": 2,
"guess": false,
"host": "3ffe:2400:0:109::2",
"reply_ms": 463.514,
"pmtu": null,
"asymmetric_difference": null,
"reached": true
}
]
}
$ tracepath6 3ffe:2400:0:109::2 | jc --tracepath -p -r
{
- `"pmtu"` - "1480",
- `"forward_hops"` - "2",
- `"return_hops"` - "2",
- `"hops"` - [
"pmtu": "1480",
"forward_hops": "2",
"return_hops": "2",
"hops": [
{
- `"ttl"` - "1",
- `"guess"` - true,
- `"host"` - "[LOCALHOST]",
- `"reply_ms"` - null,
- `"pmtu"` - "1500",
- `"asymmetric_difference"` - null,
- `"reached"` - false
"ttl": "1",
"guess": true,
"host": "[LOCALHOST]",
"reply_ms": null,
"pmtu": "1500",
"asymmetric_difference": null,
"reached": false
},
{
- `"ttl"` - "1",
- `"guess"` - false,
- `"host"` - "dust.inr.ac.ru",
- `"reply_ms"` - "0.411",
- `"pmtu"` - null,
- `"asymmetric_difference"` - null,
- `"reached"` - false
"ttl": "1",
"guess": false,
"host": "dust.inr.ac.ru",
"reply_ms": "0.411",
"pmtu": null,
"asymmetric_difference": null,
"reached": false
},
{
- `"ttl"` - "2",
- `"guess"` - false,
- `"host"` - "dust.inr.ac.ru",
- `"reply_ms"` - "0.390",
- `"pmtu"` - "1480",
- `"asymmetric_difference"` - "1",
- `"reached"` - false
"ttl": "2",
"guess": false,
"host": "dust.inr.ac.ru",
"reply_ms": "0.390",
"pmtu": "1480",
"asymmetric_difference": "1",
"reached": false
},
{
- `"ttl"` - "2",
- `"guess"` - false,
- `"host"` - "3ffe:2400:0:109::2",
- `"reply_ms"` - "463.514",
- `"pmtu"` - null,
- `"asymmetric_difference"` - null,
- `"reached"` - true
"ttl": "2",
"guess": false,
"host": "3ffe:2400:0:109::2",
"reply_ms": "463.514",
"pmtu": null,
"asymmetric_difference": null,
"reached": true
}
]
}
@ -157,16 +156,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -8,82 +8,81 @@ jc - JSON CLI output utility `traceroute` command output parser
Supports `traceroute` and `traceroute6` output.
Note: On some operating systems you will need to redirect `STDERR` to
`STDOUT` for destination info since the header line is sent to
`STDERR`. A warning message will be printed to `STDERR` if the
header row is not found.
`STDOUT` for destination info since the header line is sent to
`STDERR`. A warning message will be printed to `STDERR` if the
header row is not found.
e.g. `$ traceroute 8.8.8.8 2>&1 | jc --traceroute`
e.g. `$ traceroute 8.8.8.8 2>&1 | jc --traceroute`
Usage (cli):
$ traceroute 1.2.3.4 | jc --traceroute
$ traceroute 1.2.3.4 | jc --traceroute
or
or
$ jc traceroute 1.2.3.4
$ jc traceroute 1.2.3.4
Usage (module):
import jc
result = jc.parse('traceroute', traceroute_command_output)
import jc
result = jc.parse('traceroute', traceroute_command_output)
or
or
import jc.parsers.traceroute
result = jc.parsers.traceroute.parse(traceroute_command_output)
import jc.parsers.traceroute
result = jc.parsers.traceroute.parse(traceroute_command_output)
Schema:
{
"destination_ip": string,
"destination_name": string,
"hops": [
{
"hop": integer,
"probes": [
{
"annotation": string,
"asn": integer,
"ip": string,
"name": string,
"rtt": float
}
]
}
]
}
**Examples**:
{
"destination_ip": string,
"destination_name": string,
"hops": [
{
"hop": integer,
"probes": [
{
"annotation": string,
"asn": integer,
"ip": string,
"name": string,
"rtt": float
}
]
}
]
}
Examples:
$ traceroute google.com | jc --traceroute -p
{
- `"destination_ip"` - "216.58.194.46",
- `"destination_name"` - "google.com",
- `"hops"` - [
"destination_ip": "216.58.194.46",
"destination_name": "google.com",
"hops": [
{
- `"hop"` - 1,
- `"probes"` - [
"hop": 1,
"probes": [
{
- `"annotation"` - null,
- `"asn"` - null,
- `"ip"` - "216.230.231.141",
- `"name"` - "216-230-231-141.static.houston.tx.oplink.net",
- `"rtt"` - 198.574
"annotation": null,
"asn": null,
"ip": "216.230.231.141",
"name": "216-230-231-141.static.houston.tx.oplink.net",
"rtt": 198.574
},
{
- `"annotation"` - null,
- `"asn"` - null,
- `"ip"` - "216.230.231.141",
- `"name"` - "216-230-231-141.static.houston.tx.oplink.net",
- `"rtt"` - null
"annotation": null,
"asn": null,
"ip": "216.230.231.141",
"name": "216-230-231-141.static.houston.tx.oplink.net",
"rtt": null
},
{
- `"annotation"` - null,
- `"asn"` - null,
- `"ip"` - "216.230.231.141",
- `"name"` - "216-230-231-141.static.houston.tx.oplink.net",
- `"rtt"` - 198.65
"annotation": null,
"asn": null,
"ip": "216.230.231.141",
"name": "216-230-231-141.static.houston.tx.oplink.net",
"rtt": 198.65
}
]
},
@ -93,32 +92,32 @@ Schema:
$ traceroute google.com | jc --traceroute -p -r
{
- `"destination_ip"` - "216.58.194.46",
- `"destination_name"` - "google.com",
- `"hops"` - [
"destination_ip": "216.58.194.46",
"destination_name": "google.com",
"hops": [
{
- `"hop"` - "1",
- `"probes"` - [
"hop": "1",
"probes": [
{
- `"annotation"` - null,
- `"asn"` - null,
- `"ip"` - "216.230.231.141",
- `"name"` - "216-230-231-141.static.houston.tx.oplink.net",
- `"rtt"` - "198.574"
"annotation": null,
"asn": null,
"ip": "216.230.231.141",
"name": "216-230-231-141.static.houston.tx.oplink.net",
"rtt": "198.574"
},
{
- `"annotation"` - null,
- `"asn"` - null,
- `"ip"` - "216.230.231.141",
- `"name"` - "216-230-231-141.static.houston.tx.oplink.net",
- `"rtt"` - null
"annotation": null,
"asn": null,
"ip": "216.230.231.141",
"name": "216-230-231-141.static.houston.tx.oplink.net",
"rtt": null
},
{
- `"annotation"` - null,
- `"asn"` - null,
- `"ip"` - "216.230.231.141",
- `"name"` - "216-230-231-141.static.houston.tx.oplink.net",
- `"rtt"` - "198.650"
"annotation": null,
"asn": null,
"ip": "216.230.231.141",
"name": "216-230-231-141.static.houston.tx.oplink.net",
"rtt": "198.650"
}
]
},
@ -194,16 +193,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -7,135 +7,134 @@ jc - JSON CLI output utility `ufw status` command output parser
Usage (cli):
$ ufw status | jc --ufw
$ ufw status | jc --ufw
or
or
$ jc ufw status
$ jc ufw status
Usage (module):
import jc
result = jc.parse('ufw', ufw_command_output)
import jc
result = jc.parse('ufw', ufw_command_output)
or
or
import jc.parsers.ufw
result = jc.parsers.ufw.parse(ufw_command_output)
import jc.parsers.ufw
result = jc.parsers.ufw.parse(ufw_command_output)
Schema:
{
"status": string,
"logging": string,
"logging_level": string,
"default": string,
"new_profiles": string,
"rules": [
{
"action": string,
"action_direction": string, # null if blank
"index": integer, # null if blank
"network_protocol": string,
"to_ip": string,
"to_ip_prefix": integer,
"to_interface": string,
"to_transport": string,
"to_ports": [
integer
],
"to_port_ranges": [
{
"start": integer,
"end": integer
}
],
"to_service": string, # [0]
"from_ip": string,
"from_ip_prefix": integer,
"from_interface": string,
"from_transport": string,
"from_ports": [
integer
],
"from_port_ranges": [
{
"start": integer,
"end": integer
}
],
"from_service": string, # [1]
"comment": string # null if no comment
}
]
}
{
"status": string,
"logging": string,
"logging_level": string,
"default": string,
"new_profiles": string,
"rules": [
{
"action": string,
"action_direction": string, # null if blank
"index": integer, # null if blank
"network_protocol": string,
"to_ip": string,
"to_ip_prefix": integer,
"to_interface": string,
"to_transport": string,
"to_ports": [
integer
],
"to_port_ranges": [
{
"start": integer,
"end": integer
}
],
"to_service": string, # [0]
"from_ip": string,
"from_ip_prefix": integer,
"from_interface": string,
"from_transport": string,
"from_ports": [
integer
],
"from_port_ranges": [
{
"start": integer,
"end": integer
}
],
"from_service": string, # [1]
"comment": string # null if no comment
}
]
}
[0] null if any 'to' ports or port_ranges are set
[1] null if any 'from' ports or port_ranges are set
**Examples**:
[0] null if any 'to' ports or port_ranges are set
[1] null if any 'from' ports or port_ranges are set
Examples:
$ ufw status verbose | jc --ufw -p
{
- `"status"` - "active",
- `"logging"` - "on",
- `"logging_level"` - "low",
- `"default"` - "deny (incoming), allow (outgoing), disabled (routed)",
- `"new_profiles"` - "skip",
- `"rules"` - [
"status": "active",
"logging": "on",
"logging_level": "low",
"default": "deny (incoming), allow (outgoing), disabled (routed)",
"new_profiles": "skip",
"rules": [
{
- `"action"` - "ALLOW",
- `"action_direction"` - "IN",
- `"index"` - null,
- `"network_protocol"` - "ipv4",
- `"to_interface"` - "any",
- `"to_transport"` - "any",
- `"to_service"` - null,
- `"to_ports"` - [
"action": "ALLOW",
"action_direction": "IN",
"index": null,
"network_protocol": "ipv4",
"to_interface": "any",
"to_transport": "any",
"to_service": null,
"to_ports": [
22
],
- `"to_ip"` - "0.0.0.0",
- `"to_ip_prefix"` - 0,
- `"comment"` - null,
- `"from_ip"` - "0.0.0.0",
- `"from_ip_prefix"` - 0,
- `"from_interface"` - "any",
- `"from_transport"` - "any",
- `"from_port_ranges"` - [
"to_ip": "0.0.0.0",
"to_ip_prefix": 0,
"comment": null,
"from_ip": "0.0.0.0",
"from_ip_prefix": 0,
"from_interface": "any",
"from_transport": "any",
"from_port_ranges": [
{
- `"start"` - 0,
- `"end"` - 65535
"start": 0,
"end": 65535
}
],
- `"from_service"` - null
"from_service": null
},
{
- `"action"` - "ALLOW",
- `"action_direction"` - "IN",
- `"index"` - null,
- `"network_protocol"` - "ipv4",
- `"to_interface"` - "any",
- `"to_transport"` - "tcp",
- `"to_service"` - null,
- `"to_ports"` - [
"action": "ALLOW",
"action_direction": "IN",
"index": null,
"network_protocol": "ipv4",
"to_interface": "any",
"to_transport": "tcp",
"to_service": null,
"to_ports": [
80,
443
],
- `"to_ip"` - "0.0.0.0",
- `"to_ip_prefix"` - 0,
- `"comment"` - null,
- `"from_ip"` - "0.0.0.0",
- `"from_ip_prefix"` - 0,
- `"from_interface"` - "any",
- `"from_transport"` - "any",
- `"from_port_ranges"` - [
"to_ip": "0.0.0.0",
"to_ip_prefix": 0,
"comment": null,
"from_ip": "0.0.0.0",
"from_ip_prefix": 0,
"from_interface": "any",
"from_transport": "any",
"from_port_ranges": [
{
- `"start"` - 0,
- `"end"` - 65535
"start": 0,
"end": 65535
}
],
- `"from_service"` - null
"from_service": null
},
...
]
@ -143,64 +142,64 @@ integer
$ ufw status verbose | jc --ufw -p -r
{
- `"status"` - "active",
- `"logging"` - "on",
- `"logging_level"` - "low",
- `"default"` - "deny (incoming), allow (outgoing), disabled (routed)",
- `"new_profiles"` - "skip",
- `"rules"` - [
"status": "active",
"logging": "on",
"logging_level": "low",
"default": "deny (incoming), allow (outgoing), disabled (routed)",
"new_profiles": "skip",
"rules": [
{
- `"action"` - "ALLOW",
- `"action_direction"` - "IN",
- `"index"` - null,
- `"network_protocol"` - "ipv4",
- `"to_interface"` - "any",
- `"to_transport"` - "any",
- `"to_service"` - null,
- `"to_ports"` - [
"action": "ALLOW",
"action_direction": "IN",
"index": null,
"network_protocol": "ipv4",
"to_interface": "any",
"to_transport": "any",
"to_service": null,
"to_ports": [
"22"
],
- `"to_ip"` - "0.0.0.0",
- `"to_ip_prefix"` - "0",
- `"comment"` - null,
- `"from_ip"` - "0.0.0.0",
- `"from_ip_prefix"` - "0",
- `"from_interface"` - "any",
- `"from_transport"` - "any",
- `"from_port_ranges"` - [
"to_ip": "0.0.0.0",
"to_ip_prefix": "0",
"comment": null,
"from_ip": "0.0.0.0",
"from_ip_prefix": "0",
"from_interface": "any",
"from_transport": "any",
"from_port_ranges": [
{
- `"start"` - "0",
- `"end"` - "65535"
"start": "0",
"end": "65535"
}
],
- `"from_service"` - null
"from_service": null
},
{
- `"action"` - "ALLOW",
- `"action_direction"` - "IN",
- `"index"` - null,
- `"network_protocol"` - "ipv4",
- `"to_interface"` - "any",
- `"to_transport"` - "tcp",
- `"to_service"` - null,
- `"to_ports"` - [
"action": "ALLOW",
"action_direction": "IN",
"index": null,
"network_protocol": "ipv4",
"to_interface": "any",
"to_transport": "tcp",
"to_service": null,
"to_ports": [
"80",
"443"
],
- `"to_ip"` - "0.0.0.0",
- `"to_ip_prefix"` - "0",
- `"comment"` - null,
- `"from_ip"` - "0.0.0.0",
- `"from_ip_prefix"` - "0",
- `"from_interface"` - "any",
- `"from_transport"` - "any",
- `"from_port_ranges"` - [
"to_ip": "0.0.0.0",
"to_ip_prefix": "0",
"comment": null,
"from_ip": "0.0.0.0",
"from_ip_prefix": "0",
"from_interface": "any",
"from_transport": "any",
"from_port_ranges": [
{
- `"start"` - "0",
- `"end"` - "65535"
"start": "0",
"end": "65535"
}
],
- `"from_service"` - null
"from_service": null
},
...
]
@ -226,16 +225,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -15,106 +15,105 @@ lists and ranges that remove duplicate ports and merge overlapping ranges.
Usage (cli):
$ ufw app info OpenSSH | jc --ufw-appinfo
$ ufw app info OpenSSH | jc --ufw-appinfo
or
or
$ jc ufw app info OpenSSH
$ jc ufw app info OpenSSH
Usage (module):
import jc
result = jc.parse('ufw_appinfo', ufw_appinfo_command_output)
import jc
result = jc.parse('ufw_appinfo', ufw_appinfo_command_output)
or
or
import jc.parsers.ufw_appinfo
result = jc.parsers.ufw_appinfo.parse(ufw_appinfo_command_output)
import jc.parsers.ufw_appinfo
result = jc.parsers.ufw_appinfo.parse(ufw_appinfo_command_output)
Schema:
[
{
"profile": string,
"title": string,
"description": string,
"tcp_list": [
integer
],
"tcp_ranges": [
{
"start": integer, # [0]
"end": integer
}
],
"udp_list": [
integer
],
"udp_ranges": [
{
"start": integer, # [0]
"end": integer
}
],
"normalized_tcp_list": [
integers # [1]
],
"normalized_tcp_ranges": [
{
"start": integer, # [0]
"end": integers # [2]
}
],
"normalized_udp_list": [
integers # [1]
],
"normalized_udp_ranges": [
{
"start": integer, # [0]
"end": integers # [2]
}
]
}
]
[
{
"profile": string,
"title": string,
"description": string,
"tcp_list": [
integer
],
"tcp_ranges": [
{
"start": integer, # [0]
"end": integer
}
],
"udp_list": [
integer
],
"udp_ranges": [
{
"start": integer, # [0]
"end": integer
}
],
"normalized_tcp_list": [
integers # [1]
],
"normalized_tcp_ranges": [
{
"start": integer, # [0]
"end": integers # [2]
}
],
"normalized_udp_list": [
integers # [1]
],
"normalized_udp_ranges": [
{
"start": integer, # [0]
"end": integers # [2]
}
]
}
]
[0] 'any' is converted to start/end: 0/65535
[1] duplicates and overlapping are removed
[2] overlapping are merged
**Examples**:
[0] 'any' is converted to start/end: 0/65535
[1] duplicates and overlapping are removed
[2] overlapping are merged
Examples:
$ ufw app info MSN | jc --ufw-appinfo -p
[
{
- `"profile"` - "MSN",
- `"title"` - "MSN Chat",
- `"description"` - "MSN chat protocol (with file transfer and voice)",
- `"tcp_list"` - [
"profile": "MSN",
"title": "MSN Chat",
"description": "MSN chat protocol (with file transfer and voice)",
"tcp_list": [
1863,
6901
],
- `"udp_list"` - [
"udp_list": [
1863,
6901
],
- `"tcp_ranges"` - [
"tcp_ranges": [
{
- `"start"` - 6891,
- `"end"` - 6900
"start": 6891,
"end": 6900
}
],
- `"normalized_tcp_list"` - [
"normalized_tcp_list": [
1863,
6901
],
- `"normalized_tcp_ranges"` - [
"normalized_tcp_ranges": [
{
- `"start"` - 6891,
- `"end"` - 6900
"start": 6891,
"end": 6900
}
],
- `"normalized_udp_list"` - [
"normalized_udp_list": [
1863,
6901
]
@ -124,21 +123,21 @@ integers # [1]
$ ufw app info MSN | jc --ufw-appinfo -p -r
[
{
- `"profile"` - "MSN",
- `"title"` - "MSN Chat",
- `"description"` - "MSN chat protocol (with file transfer and voice)",
- `"tcp_list"` - [
"profile": "MSN",
"title": "MSN Chat",
"description": "MSN chat protocol (with file transfer and voice)",
"tcp_list": [
"1863",
"6901"
],
- `"udp_list"` - [
"udp_list": [
"1863",
"6901"
],
- `"tcp_ranges"` - [
"tcp_ranges": [
{
- `"start"` - "6891",
- `"end"` - "6900"
"start": "6891",
"end": "6900"
}
]
}
@ -164,16 +163,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -9,48 +9,47 @@ Note: Must use `uname -a`
Usage (cli):
$ uname -a | jc --uname
$ uname -a | jc --uname
or
or
$ jc uname -a
$ jc uname -a
Usage (module):
import jc
result = jc.parse('uname', uname_command_output)
import jc
result = jc.parse('uname', uname_command_output)
or
or
import jc.parsers.uname
result = jc.parsers.uname.parse(uname_command_output)
import jc.parsers.uname
result = jc.parsers.uname.parse(uname_command_output)
Schema:
{
"kernel_name": string,
"node_name": string,
"kernel_release": string,
"operating_system": string,
"hardware_platform": string,
"processor": string,
"machine": string,
"kernel_version": string
}
**Example**:
{
"kernel_name": string,
"node_name": string,
"kernel_release": string,
"operating_system": string,
"hardware_platform": string,
"processor": string,
"machine": string,
"kernel_version": string
}
Example:
$ uname -a | jc --uname -p
{
- `"kernel_name"` - "Linux",
- `"node_name"` - "user-ubuntu",
- `"kernel_release"` - "4.15.0-65-generic",
- `"operating_system"` - "GNU/Linux",
- `"hardware_platform"` - "x86_64",
- `"processor"` - "x86_64",
- `"machine"` - "x86_64",
- `"kernel_version"` - "`74`-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019"
"kernel_name": "Linux",
"node_name": "user-ubuntu",
"kernel_release": "4.15.0-65-generic",
"operating_system": "GNU/Linux",
"hardware_platform": "x86_64",
"processor": "x86_64",
"machine": "x86_64",
"kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019"
}
<a id="jc.parsers.uname.info"></a>
@ -73,16 +72,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -14,10 +14,9 @@ def simple_table_parse(data)
Parse simple tables. The last column may contain data with spaces.
**Arguments**:
Parameters:
- `data` - (list) Text data to parse that has been split into lines
data: (list) Text data to parse that has been split into lines
via .splitlines(). Item 0 must be the header row.
Any spaces in header names should be changed to
underscore '_'. You should also ensure headers are
@ -26,9 +25,7 @@ Parse simple tables. The last column may contain data with spaces.
Also, ensure there are no blank lines (list items)
in the data.
**Returns**:
Returns:
List of Dictionaries
@ -42,10 +39,9 @@ def sparse_table_parse(data, delim='\u2063')
Parse tables with missing column data or with spaces in column data.
**Arguments**:
Parameters:
- `data` - (list) Text data to parse that has been split into lines
data: (list) Text data to parse that has been split into lines
via .splitlines(). Item 0 must be the header row.
Any spaces in header names should be changed to
underscore '_'. You should also ensure headers are
@ -56,15 +52,13 @@ Parse tables with missing column data or with spaces in column data.
Also, ensure there are no blank lines (list items)
in the data.
- `delim` - (string) Delimiter to use. By default `u\\2063`
delim: (string) Delimiter to use. By default `u\\2063`
(invisible separator) is used since it is unlikely
to ever be seen in terminal output. You can change
this for troubleshooting purposes or if there is a
delimiter conflict with your data.
**Returns**:
Returns:
List of Dictionaries

View File

@ -13,192 +13,191 @@ only available if the timezone field is UTC.
Usage (cli):
$ upower -d | jc --upower
$ upower -d | jc --upower
or
or
$ jc upower -d
$ jc upower -d
Usage (module):
import jc
result = jc.parse('upower', upower_command_output)
import jc
result = jc.parse('upower', upower_command_output)
or
or
import jc.parsers.upower
result = jc.parsers.upower.parse(upower_command_output)
import jc.parsers.upower
result = jc.parsers.upower.parse(upower_command_output)
Schema:
[
{
"type": string,
"device_name": string,
"native_path": string,
"power_supply": boolean,
"updated": string,
"updated_epoch": integer, # [0]
"updated_epoch_utc": integer, # [0]
"updated_seconds_ago": integer,
"has_history": boolean,
"has_statistics": boolean,
"detail": {
"type": string,
"warning_level": string, # null if none
"online": boolean,
"icon_name": string
"present": boolean,
"rechargeable": boolean,
"state": string,
"energy": float,
"energy_unit": string,
"energy_empty": float,
"energy_empty_unit": string,
"energy_full": float,
"energy_full_unit": string,
"energy_full_design": float,
"energy_full_design_unit": string,
"energy_rate": float,
"energy_rate_unit": string,
"voltage": float,
"voltage_unit": string,
"time_to_full": float,
"time_to_full_unit": string,
"percentage": float,
"capacity": float,
"technology": string
},
"history_charge": [
{
"time": integer,
"percent_charged": float,
"status": string
}
],
"history_rate":[
{
"time": integer,
"percent_charged": float,
"status": string
}
],
"daemon_version": string,
"on_battery": boolean,
"lid_is_closed": boolean,
"lid_is_present": boolean,
"critical_action": string
}
]
[
{
"type": string,
"device_name": string,
"native_path": string,
"power_supply": boolean,
"updated": string,
"updated_epoch": integer, # [0]
"updated_epoch_utc": integer, # [0]
"updated_seconds_ago": integer,
"has_history": boolean,
"has_statistics": boolean,
"detail": {
"type": string,
"warning_level": string, # null if none
"online": boolean,
"icon_name": string
"present": boolean,
"rechargeable": boolean,
"state": string,
"energy": float,
"energy_unit": string,
"energy_empty": float,
"energy_empty_unit": string,
"energy_full": float,
"energy_full_unit": string,
"energy_full_design": float,
"energy_full_design_unit": string,
"energy_rate": float,
"energy_rate_unit": string,
"voltage": float,
"voltage_unit": string,
"time_to_full": float,
"time_to_full_unit": string,
"percentage": float,
"capacity": float,
"technology": string
},
"history_charge": [
{
"time": integer,
"percent_charged": float,
"status": string
}
],
"history_rate":[
{
"time": integer,
"percent_charged": float,
"status": string
}
],
"daemon_version": string,
"on_battery": boolean,
"lid_is_closed": boolean,
"lid_is_present": boolean,
"critical_action": string
}
]
[0] null if date-time conversion fails
**Examples**:
[0] null if date-time conversion fails
Examples:
$ upower -i /org/freedesktop/UPower/devices/battery | jc --upower -p
[
{
- `"native_path"` - "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...",
- `"vendor"` - "NOTEBOOK",
- `"model"` - "BAT",
- `"serial"` - "0001",
- `"power_supply"` - true,
- `"updated"` - "Thu 11 Mar 2021 06:28:08 PM UTC",
- `"has_history"` - true,
- `"has_statistics"` - true,
- `"detail"` - {
- `"type"` - "battery",
- `"present"` - true,
- `"rechargeable"` - true,
- `"state"` - "charging",
- `"energy"` - 22.3998,
- `"energy_empty"` - 0.0,
- `"energy_full"` - 52.6473,
- `"energy_full_design"` - 62.16,
- `"energy_rate"` - 31.6905,
- `"voltage"` - 12.191,
- `"time_to_full"` - 57.3,
- `"percentage"` - 42.5469,
- `"capacity"` - 84.6964,
- `"technology"` - "lithium-ion",
- `"energy_unit"` - "Wh",
- `"energy_empty_unit"` - "Wh",
- `"energy_full_unit"` - "Wh",
- `"energy_full_design_unit"` - "Wh",
- `"energy_rate_unit"` - "W",
- `"voltage_unit"` - "V",
- `"time_to_full_unit"` - "minutes"
"native_path": "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...",
"vendor": "NOTEBOOK",
"model": "BAT",
"serial": "0001",
"power_supply": true,
"updated": "Thu 11 Mar 2021 06:28:08 PM UTC",
"has_history": true,
"has_statistics": true,
"detail": {
"type": "battery",
"present": true,
"rechargeable": true,
"state": "charging",
"energy": 22.3998,
"energy_empty": 0.0,
"energy_full": 52.6473,
"energy_full_design": 62.16,
"energy_rate": 31.6905,
"voltage": 12.191,
"time_to_full": 57.3,
"percentage": 42.5469,
"capacity": 84.6964,
"technology": "lithium-ion",
"energy_unit": "Wh",
"energy_empty_unit": "Wh",
"energy_full_unit": "Wh",
"energy_full_design_unit": "Wh",
"energy_rate_unit": "W",
"voltage_unit": "V",
"time_to_full_unit": "minutes"
},
- `"history_charge"` - [
"history_charge": [
{
- `"time"` - 1328809335,
- `"percent_charged"` - 42.547,
- `"status"` - "charging"
"time": 1328809335,
"percent_charged": 42.547,
"status": "charging"
},
{
- `"time"` - 1328809305,
- `"percent_charged"` - 42.02,
- `"status"` - "charging"
"time": 1328809305,
"percent_charged": 42.02,
"status": "charging"
}
],
- `"history_rate"` - [
"history_rate": [
{
- `"time"` - 1328809335,
- `"percent_charged"` - 31.691,
- `"status"` - "charging"
"time": 1328809335,
"percent_charged": 31.691,
"status": "charging"
}
],
- `"updated_seconds_ago"` - 441975,
- `"updated_epoch"` - 1615516088,
- `"updated_epoch_utc"` - 1615487288
"updated_seconds_ago": 441975,
"updated_epoch": 1615516088,
"updated_epoch_utc": 1615487288
}
]
$ upower -i /org/freedesktop/UPower/devices/battery | jc --upower -p -r
[
{
- `"native_path"` - "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...",
- `"vendor"` - "NOTEBOOK",
- `"model"` - "BAT",
- `"serial"` - "0001",
- `"power_supply"` - "yes",
- `"updated"` - "Thu 11 Mar 2021 06:28:08 PM UTC (441975 seconds ago)",
- `"has_history"` - "yes",
- `"has_statistics"` - "yes",
- `"detail"` - {
- `"type"` - "battery",
- `"present"` - "yes",
- `"rechargeable"` - "yes",
- `"state"` - "charging",
- `"energy"` - "22.3998 Wh",
- `"energy_empty"` - "0 Wh",
- `"energy_full"` - "52.6473 Wh",
- `"energy_full_design"` - "62.16 Wh",
- `"energy_rate"` - "31.6905 W",
- `"voltage"` - "12.191 V",
- `"time_to_full"` - "57.3 minutes",
- `"percentage"` - "42.5469%",
- `"capacity"` - "84.6964%",
- `"technology"` - "lithium-ion"
"native_path": "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...",
"vendor": "NOTEBOOK",
"model": "BAT",
"serial": "0001",
"power_supply": "yes",
"updated": "Thu 11 Mar 2021 06:28:08 PM UTC (441975 seconds ago)",
"has_history": "yes",
"has_statistics": "yes",
"detail": {
"type": "battery",
"present": "yes",
"rechargeable": "yes",
"state": "charging",
"energy": "22.3998 Wh",
"energy_empty": "0 Wh",
"energy_full": "52.6473 Wh",
"energy_full_design": "62.16 Wh",
"energy_rate": "31.6905 W",
"voltage": "12.191 V",
"time_to_full": "57.3 minutes",
"percentage": "42.5469%",
"capacity": "84.6964%",
"technology": "lithium-ion"
},
- `"history_charge"` - [
"history_charge": [
{
- `"time"` - "1328809335",
- `"percent_charged"` - "42.547",
- `"status"` - "charging"
"time": "1328809335",
"percent_charged": "42.547",
"status": "charging"
},
{
- `"time"` - "1328809305",
- `"percent_charged"` - "42.020",
- `"status"` - "charging"
"time": "1328809305",
"percent_charged": "42.020",
"status": "charging"
}
],
- `"history_rate"` - [
"history_rate": [
{
- `"time"` - "1328809335",
- `"percent_charged"` - "31.691",
- `"status"` - "charging"
"time": "1328809335",
"percent_charged": "31.691",
"status": "charging"
}
]
}
@ -224,16 +223,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,68 +7,67 @@ jc - JSON CLI output utility `uptime` command output parser
Usage (cli):
$ uptime | jc --uptime
$ uptime | jc --uptime
or
or
$ jc uptime
$ jc uptime
Usage (module):
import jc
result = jc.parse('uptime', uptime_command_output)
import jc
result = jc.parse('uptime', uptime_command_output)
or
or
import jc.parsers.uptime
result = jc.parsers.uptime.parse(uptime_command_output)
import jc.parsers.uptime
result = jc.parsers.uptime.parse(uptime_command_output)
Schema:
{
"time": string,
"time_hour": integer,
"time_minute": integer,
"time_second": integer, # null if not displayed
"uptime": string,
"uptime_days": integer,
"uptime_hours": integer,
"uptime_minutes": integer,
"uptime_total_seconds": integer,
"users": integer,
"load_1m": float,
"load_5m": float,
"load_15m": float
}
**Example**:
{
"time": string,
"time_hour": integer,
"time_minute": integer,
"time_second": integer, # null if not displayed
"uptime": string,
"uptime_days": integer,
"uptime_hours": integer,
"uptime_minutes": integer,
"uptime_total_seconds": integer,
"users": integer,
"load_1m": float,
"load_5m": float,
"load_15m": float
}
Example:
$ uptime | jc --uptime -p
{
- `"time"` - "11:35",
- `"uptime"` - "3 days, 4:03",
- `"users"` - 5,
- `"load_1m"` - 1.88,
- `"load_5m"` - 2.0,
- `"load_15m"` - 1.94,
- `"time_hour"` - 11,
- `"time_minute"` - 35,
- `"time_second"` - null,
- `"uptime_days"` - 3,
- `"uptime_hours"` - 4,
- `"uptime_minutes"` - 3,
- `"uptime_total_seconds"` - 273780
"time": "11:35",
"uptime": "3 days, 4:03",
"users": 5,
"load_1m": 1.88,
"load_5m": 2.0,
"load_15m": 1.94,
"time_hour": 11,
"time_minute": 35,
"time_second": null,
"uptime_days": 3,
"uptime_hours": 4,
"uptime_minutes": 3,
"uptime_total_seconds": 273780
}
$ uptime | jc --uptime -p -r
{
- `"time"` - "11:36",
- `"uptime"` - "3 days, 4:04",
- `"users"` - "5",
- `"load_1m"` - "1.88",
- `"load_5m"` - "1.99",
- `"load_15m"` - "1.94"
"time": "11:36",
"uptime": "3 days, 4:04",
"users": "5",
"load_1m": "1.88",
"load_5m": "1.99",
"load_15m": "1.94"
}
<a id="jc.parsers.uptime.info"></a>
@ -91,16 +90,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data

View File

@ -15,120 +15,119 @@ available if the timezone field is UTC.
Usage (cli):
$ vmstat | jc --vmstat
$ vmstat | jc --vmstat
or
or
$ jc vmstat
$ jc vmstat
Usage (module):
import jc
result = jc.parse('vmstat', vmstat_command_output)
import jc
result = jc.parse('vmstat', vmstat_command_output)
or
or
import jc.parsers.vmstat
result = jc.parsers.vmstat.parse(vmstat_command_output)
import jc.parsers.vmstat
result = jc.parsers.vmstat.parse(vmstat_command_output)
Schema:
[
{
"runnable_procs": integer,
"uninterruptible_sleeping_procs": integer,
"virtual_mem_used": integer,
"free_mem": integer,
"buffer_mem": integer,
"cache_mem": integer,
"inactive_mem": integer,
"active_mem": integer,
"swap_in": integer,
"swap_out": integer,
"blocks_in": integer,
"blocks_out": integer,
"interrupts": integer,
"context_switches": integer,
"user_time": integer,
"system_time": integer,
"idle_time": integer,
"io_wait_time": integer,
"stolen_time": integer,
"disk": string,
"total_reads": integer,
"merged_reads": integer,
"sectors_read": integer,
"reading_ms": integer,
"total_writes": integer,
"merged_writes": integer,
"sectors_written": integer,
"writing_ms": integer,
"current_io": integer,
"io_seconds": integer,
"timestamp": string,
"timezone": string,
"epoch": integer, # [0]
"epoch_utc": integer # [1]
}
]
[
{
"runnable_procs": integer,
"uninterruptible_sleeping_procs": integer,
"virtual_mem_used": integer,
"free_mem": integer,
"buffer_mem": integer,
"cache_mem": integer,
"inactive_mem": integer,
"active_mem": integer,
"swap_in": integer,
"swap_out": integer,
"blocks_in": integer,
"blocks_out": integer,
"interrupts": integer,
"context_switches": integer,
"user_time": integer,
"system_time": integer,
"idle_time": integer,
"io_wait_time": integer,
"stolen_time": integer,
"disk": string,
"total_reads": integer,
"merged_reads": integer,
"sectors_read": integer,
"reading_ms": integer,
"total_writes": integer,
"merged_writes": integer,
"sectors_written": integer,
"writing_ms": integer,
"current_io": integer,
"io_seconds": integer,
"timestamp": string,
"timezone": string,
"epoch": integer, # [0]
"epoch_utc": integer # [1]
}
]
[0] naive timestamp if -t flag is used
[1] aware timestamp if -t flag is used and UTC TZ
**Examples**:
[0] naive timestamp if -t flag is used
[1] aware timestamp if -t flag is used and UTC TZ
Examples:
$ vmstat | jc --vmstat -p
[
{
- `"runnable_procs"` - 2,
- `"uninterruptible_sleeping_procs"` - 0,
- `"virtual_mem_used"` - 0,
- `"free_mem"` - 2794468,
- `"buffer_mem"` - 2108,
- `"cache_mem"` - 741208,
- `"inactive_mem"` - null,
- `"active_mem"` - null,
- `"swap_in"` - 0,
- `"swap_out"` - 0,
- `"blocks_in"` - 1,
- `"blocks_out"` - 3,
- `"interrupts"` - 29,
- `"context_switches"` - 57,
- `"user_time"` - 0,
- `"system_time"` - 0,
- `"idle_time"` - 99,
- `"io_wait_time"` - 0,
- `"stolen_time"` - 0,
- `"timestamp"` - null,
- `"timezone"` - null
"runnable_procs": 2,
"uninterruptible_sleeping_procs": 0,
"virtual_mem_used": 0,
"free_mem": 2794468,
"buffer_mem": 2108,
"cache_mem": 741208,
"inactive_mem": null,
"active_mem": null,
"swap_in": 0,
"swap_out": 0,
"blocks_in": 1,
"blocks_out": 3,
"interrupts": 29,
"context_switches": 57,
"user_time": 0,
"system_time": 0,
"idle_time": 99,
"io_wait_time": 0,
"stolen_time": 0,
"timestamp": null,
"timezone": null
}
]
$ vmstat | jc --vmstat -p -r
[
{
- `"runnable_procs"` - "2",
- `"uninterruptible_sleeping_procs"` - "0",
- `"virtual_mem_used"` - "0",
- `"free_mem"` - "2794468",
- `"buffer_mem"` - "2108",
- `"cache_mem"` - "741208",
- `"inactive_mem"` - null,
- `"active_mem"` - null,
- `"swap_in"` - "0",
- `"swap_out"` - "0",
- `"blocks_in"` - "1",
- `"blocks_out"` - "3",
- `"interrupts"` - "29",
- `"context_switches"` - "57",
- `"user_time"` - "0",
- `"system_time"` - "0",
- `"idle_time"` - "99",
- `"io_wait_time"` - "0",
- `"stolen_time"` - "0",
- `"timestamp"` - null,
- `"timezone"` - null
"runnable_procs": "2",
"uninterruptible_sleeping_procs": "0",
"virtual_mem_used": "0",
"free_mem": "2794468",
"buffer_mem": "2108",
"cache_mem": "741208",
"inactive_mem": null,
"active_mem": null,
"swap_in": "0",
"swap_out": "0",
"blocks_in": "1",
"blocks_out": "3",
"interrupts": "29",
"context_switches": "57",
"user_time": "0",
"system_time": "0",
"idle_time": "99",
"io_wait_time": "0",
"stolen_time": "0",
"timestamp": null,
"timezone": null
}
]
@ -152,16 +151,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -17,7 +17,7 @@ available if the timezone field is UTC.
Usage (cli):
$ vmstat | jc --vmstat-s
$ vmstat | jc --vmstat-s
> Note: When piping `jc` converted `vmstat` output to other processes it may
appear the output is hanging due to the OS pipe buffers. This is because
@ -28,75 +28,74 @@ for more information.
Usage (module):
import jc
# result is an iterable object (generator)
result = jc.parse('vmstat_s', vmstat_command_output.splitlines())
for item in result:
# do something
import jc
# result is an iterable object (generator)
result = jc.parse('vmstat_s', vmstat_command_output.splitlines())
for item in result:
# do something
or
or
import jc.parsers.vmstat_s
# result is an iterable object (generator)
result = jc.parsers.vmstat_s.parse(vmstat_command_output.splitlines())
for item in result:
# do something
import jc.parsers.vmstat_s
# result is an iterable object (generator)
result = jc.parsers.vmstat_s.parse(vmstat_command_output.splitlines())
for item in result:
# do something
Schema:
{
"runnable_procs": integer,
"uninterruptible_sleeping_procs": integer,
"virtual_mem_used": integer,
"free_mem": integer,
"buffer_mem": integer,
"cache_mem": integer,
"inactive_mem": integer,
"active_mem": integer,
"swap_in": integer,
"swap_out": integer,
"blocks_in": integer,
"blocks_out": integer,
"interrupts": integer,
"context_switches": integer,
"user_time": integer,
"system_time": integer,
"idle_time": integer,
"io_wait_time": integer,
"stolen_time": integer,
"disk": string,
"total_reads": integer,
"merged_reads": integer,
"sectors_read": integer,
"reading_ms": integer,
"total_writes": integer,
"merged_writes": integer,
"sectors_written": integer,
"writing_ms": integer,
"current_io": integer,
"io_seconds": integer,
"timestamp": string,
"timezone": string,
"epoch": integer, # [0]
"epoch_utc": integer # [1]
{
"runnable_procs": integer,
"uninterruptible_sleeping_procs": integer,
"virtual_mem_used": integer,
"free_mem": integer,
"buffer_mem": integer,
"cache_mem": integer,
"inactive_mem": integer,
"active_mem": integer,
"swap_in": integer,
"swap_out": integer,
"blocks_in": integer,
"blocks_out": integer,
"interrupts": integer,
"context_switches": integer,
"user_time": integer,
"system_time": integer,
"idle_time": integer,
"io_wait_time": integer,
"stolen_time": integer,
"disk": string,
"total_reads": integer,
"merged_reads": integer,
"sectors_read": integer,
"reading_ms": integer,
"total_writes": integer,
"merged_writes": integer,
"sectors_written": integer,
"writing_ms": integer,
"current_io": integer,
"io_seconds": integer,
"timestamp": string,
"timezone": string,
"epoch": integer, # [0]
"epoch_utc": integer # [1]
# Below object only exists if using -qq or ignore_exceptions=True
# Below object only exists if using -qq or ignore_exceptions=True
"_jc_meta":
{
"success": boolean, # [2]
"error": string, # [3]
"line": string # [3]
}
}
"_jc_meta":
{
"success": boolean, # [2]
"error": string, # [3]
"line": string # [3]
}
}
[0] naive timestamp if -t flag is used
[1] aware timestamp if -t flag is used and UTC TZ
[2] false if error parsing
[3] exists if "success" is false
**Examples**:
[0] naive timestamp if -t flag is used
[1] aware timestamp if -t flag is used and UTC TZ
[2] false if error parsing
[3] exists if "success" is false
Examples:
$ vmstat | jc --vmstat-s
{"runnable_procs":2,"uninterruptible_sleeping_procs":0,"virtual_mem...}
@ -126,25 +125,20 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False)
Main text parsing generator function. Returns an iterator object.
**Arguments**:
Parameters:
- `data` - (iterable) line-based text data to parse
data: (iterable) line-based text data to parse
(e.g. sys.stdin or str.splitlines())
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
- `ignore_exceptions` - (boolean) ignore parsing exceptions if True
**Yields**:
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
ignore_exceptions: (boolean) ignore parsing exceptions if True
Yields:
Dictionary. Raw or processed structured data.
**Returns**:
Returns:
Iterator object

View File

@ -7,105 +7,104 @@ jc - JSON CLI output utility `w` command output parser
Usage (cli):
$ w | jc --w
$ w | jc --w
or
or
$ jc w
$ jc w
Usage (module):
import jc
result = jc.parse('w', w_command_output)
import jc
result = jc.parse('w', w_command_output)
or
or
import jc.parsers.w
result = jc.parsers.w.parse(w_command_output)
import jc.parsers.w
result = jc.parsers.w.parse(w_command_output)
Schema:
[
{
"user": string, # '-' = null
"tty": string, # '-' = null
"from": string, # '-' = null
"login_at": string, # '-' = null
"idle": string, # '-' = null
"jcpu": string,
"pcpu": string,
"what": string # '-' = null
}
]
**Examples**:
[
{
"user": string, # '-' = null
"tty": string, # '-' = null
"from": string, # '-' = null
"login_at": string, # '-' = null
"idle": string, # '-' = null
"jcpu": string,
"pcpu": string,
"what": string # '-' = null
}
]
Examples:
$ w | jc --w -p
[
{
- `"user"` - "root",
- `"tty"` - "tty1",
- `"from"` - null,
- `"login_at"` - "07:49",
- `"idle"` - "1:15m",
- `"jcpu"` - "0.00s",
- `"pcpu"` - "0.00s",
- `"what"` - "-bash"
"user": "root",
"tty": "tty1",
"from": null,
"login_at": "07:49",
"idle": "1:15m",
"jcpu": "0.00s",
"pcpu": "0.00s",
"what": "-bash"
},
{
- `"user"` - "root",
- `"tty"` - "ttyS0",
- `"from"` - null,
- `"login_at"` - "06:24",
- `"idle"` - "0.00s",
- `"jcpu"` - "0.43s",
- `"pcpu"` - "0.00s",
- `"what"` - "w"
"user": "root",
"tty": "ttyS0",
"from": null,
"login_at": "06:24",
"idle": "0.00s",
"jcpu": "0.43s",
"pcpu": "0.00s",
"what": "w"
},
{
- `"user"` - "root",
- `"tty"` - "pts/0",
- `"from"` - "192.168.71.1",
- `"login_at"` - "06:29",
- `"idle"` - "2:35m",
- `"jcpu"` - "0.00s",
- `"pcpu"` - "0.00s",
- `"what"` - "-bash"
"user": "root",
"tty": "pts/0",
"from": "192.168.71.1",
"login_at": "06:29",
"idle": "2:35m",
"jcpu": "0.00s",
"pcpu": "0.00s",
"what": "-bash"
}
]
$ w | jc --w -p -r
[
{
- `"user"` - "kbrazil",
- `"tty"` - "tty1",
- `"from"` - "-",
- `"login_at"` - "07:49",
- `"idle"` - "1:16m",
- `"jcpu"` - "0.00s",
- `"pcpu"` - "0.00s",
- `"what"` - "-bash"
"user": "kbrazil",
"tty": "tty1",
"from": "-",
"login_at": "07:49",
"idle": "1:16m",
"jcpu": "0.00s",
"pcpu": "0.00s",
"what": "-bash"
},
{
- `"user"` - "kbrazil",
- `"tty"` - "ttyS0",
- `"from"` - "-",
- `"login_at"` - "06:24",
- `"idle"` - "2.00s",
- `"jcpu"` - "0.46s",
- `"pcpu"` - "0.00s",
- `"what"` - "w"
"user": "kbrazil",
"tty": "ttyS0",
"from": "-",
"login_at": "06:24",
"idle": "2.00s",
"jcpu": "0.46s",
"pcpu": "0.00s",
"what": "w"
},
{
- `"user"` - "kbrazil",
- `"tty"` - "pts/0",
- `"from"` - "192.168.71.1",
- `"login_at"` - "06:29",
- `"idle"` - "2:36m",
- `"jcpu"` - "0.00s",
- `"pcpu"` - "0.00s",
- `"what"` - "-bash"
"user": "kbrazil",
"tty": "pts/0",
"from": "192.168.71.1",
"login_at": "06:29",
"idle": "2:36m",
"jcpu": "0.00s",
"pcpu": "0.00s",
"what": "-bash"
}
]
@ -129,16 +128,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,55 +7,54 @@ jc - JSON CLI output utility `wc` command output parser
Usage (cli):
$ wc file.txt | jc --wc
$ wc file.txt | jc --wc
or
or
$ jc wc file.txt
$ jc wc file.txt
Usage (module):
import jc
result = jc.parse('wc', wc_command_output)
import jc
result = jc.parse('wc', wc_command_output)
or
or
import jc.parsers.wc
result = jc.parsers.wc.parse(wc_command_output)
import jc.parsers.wc
result = jc.parsers.wc.parse(wc_command_output)
Schema:
[
{
"filename": string,
"lines": integer,
"words": integer,
"characters": integer
}
]
**Examples**:
[
{
"filename": string,
"lines": integer,
"words": integer,
"characters": integer
}
]
Examples:
$ wc * | jc --wc -p
[
{
- `"filename"` - "airport-I.json",
- `"lines"` - 1,
- `"words"` - 30,
- `"characters"` - 307
"filename": "airport-I.json",
"lines": 1,
"words": 30,
"characters": 307
},
{
- `"filename"` - "airport-I.out",
- `"lines"` - 15,
- `"words"` - 33,
- `"characters"` - 348
"filename": "airport-I.out",
"lines": 15,
"words": 33,
"characters": 348
},
{
- `"filename"` - "airport-s.json",
- `"lines"` - 1,
- `"words"` - 202,
- `"characters"` - 2152
"filename": "airport-s.json",
"lines": 1,
"words": 202,
"characters": 2152
},
...
]
@ -80,16 +79,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -12,132 +12,131 @@ time of the system the parser is run on)
Usage (cli):
$ who | jc --who
$ who | jc --who
or
or
$ jc who
$ jc who
Usage (module):
import jc
result = jc.parse('who', who_command_output)
import jc
result = jc.parse('who', who_command_output)
or
or
import jc.parsers.who
result = jc.parsers.who.parse(who_command_output)
import jc.parsers.who
result = jc.parsers.who.parse(who_command_output)
Schema:
[
{
"user": string,
"event": string,
"writeable_tty": string,
"tty": string,
"time": string,
"epoch": integer, # [0]
"idle": string,
"pid": integer,
"from": string,
"comment": string
}
]
[
{
"user": string,
"event": string,
"writeable_tty": string,
"tty": string,
"time": string,
"epoch": integer, # [0]
"idle": string,
"pid": integer,
"from": string,
"comment": string
}
]
[0] naive timestamp. null if time cannot be converted
**Examples**:
[0] naive timestamp. null if time cannot be converted
Examples:
$ who -a | jc --who -p
[
{
- `"event"` - "reboot",
- `"time"` - "Feb 7 23:31",
- `"pid"` - 1,
- `"epoch"` - null
"event": "reboot",
"time": "Feb 7 23:31",
"pid": 1,
"epoch": null
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "-",
- `"tty"` - "console",
- `"time"` - "Feb 7 23:32",
- `"idle"` - "old",
- `"pid"` - 105,
- `"epoch"` - null
"user": "joeuser",
"writeable_tty": "-",
"tty": "console",
"time": "Feb 7 23:32",
"idle": "old",
"pid": 105,
"epoch": null
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "+",
- `"tty"` - "ttys000",
- `"time"` - "Feb 13 16:44",
- `"idle"` - ".",
- `"pid"` - 51217,
- `"comment"` - "term=0 exit=0",
- `"epoch"` - null
"user": "joeuser",
"writeable_tty": "+",
"tty": "ttys000",
"time": "Feb 13 16:44",
"idle": ".",
"pid": 51217,
"comment": "term=0 exit=0",
"epoch": null
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "?",
- `"tty"` - "ttys003",
- `"time"` - "Feb 28 08:59",
- `"idle"` - "01:36",
- `"pid"` - 41402,
- `"epoch"` - null
"user": "joeuser",
"writeable_tty": "?",
"tty": "ttys003",
"time": "Feb 28 08:59",
"idle": "01:36",
"pid": 41402,
"epoch": null
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "+",
- `"tty"` - "ttys004",
- `"time"` - "Mar 1 16:35",
- `"idle"` - ".",
- `"pid"` - 15679,
- `"from"` - "192.168.1.5",
- `"epoch"` - null
"user": "joeuser",
"writeable_tty": "+",
"tty": "ttys004",
"time": "Mar 1 16:35",
"idle": ".",
"pid": 15679,
"from": "192.168.1.5",
"epoch": null
}
]
$ who -a | jc --who -p -r
[
{
- `"event"` - "reboot",
- `"time"` - "Feb 7 23:31",
- `"pid"` - "1"
"event": "reboot",
"time": "Feb 7 23:31",
"pid": "1"
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "-",
- `"tty"` - "console",
- `"time"` - "Feb 7 23:32",
- `"idle"` - "old",
- `"pid"` - "105"
"user": "joeuser",
"writeable_tty": "-",
"tty": "console",
"time": "Feb 7 23:32",
"idle": "old",
"pid": "105"
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "+",
- `"tty"` - "ttys000",
- `"time"` - "Feb 13 16:44",
- `"idle"` - ".",
- `"pid"` - "51217",
- `"comment"` - "term=0 exit=0"
"user": "joeuser",
"writeable_tty": "+",
"tty": "ttys000",
"time": "Feb 13 16:44",
"idle": ".",
"pid": "51217",
"comment": "term=0 exit=0"
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "?",
- `"tty"` - "ttys003",
- `"time"` - "Feb 28 08:59",
- `"idle"` - "01:36",
- `"pid"` - "41402"
"user": "joeuser",
"writeable_tty": "?",
"tty": "ttys003",
"time": "Feb 28 08:59",
"idle": "01:36",
"pid": "41402"
},
{
- `"user"` - "joeuser",
- `"writeable_tty"` - "+",
- `"tty"` - "ttys004",
- `"time"` - "Mar 1 16:35",
- `"idle"` - ".",
- `"pid"` - "15679",
- `"from"` - "192.168.1.5"
"user": "joeuser",
"writeable_tty": "+",
"tty": "ttys004",
"time": "Mar 1 16:35",
"idle": ".",
"pid": "15679",
"from": "192.168.1.5"
}
]
@ -161,16 +160,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -7,30 +7,29 @@ jc - JSON CLI output utility `XML` file parser
Usage (cli):
$ cat foo.xml | jc --xml
$ cat foo.xml | jc --xml
Usage (module):
import jc
result = jc.parse('xml', xml_file_output)
import jc
result = jc.parse('xml', xml_file_output)
or
or
import jc.parsers.xml
result = jc.parsers.xml.parse(xml_file_output)
import jc.parsers.xml
result = jc.parsers.xml.parse(xml_file_output)
Schema:
XML Document converted to a Dictionary
See https://github.com/martinblech/xmltodict for details
XML Document converted to a Dictionary
See https://github.com/martinblech/xmltodict for details
{
"key1": string/object,
"key2": string/object
}
**Examples**:
{
"key1": string/object,
"key2": string/object
}
Examples:
$ cat cd_catalog.xml
<?xml version="1.0" encoding="UTF-8"?>
@ -55,23 +54,23 @@ See https://github.com/martinblech/xmltodict for details
$ cat cd_catalog.xml | jc --xml -p
{
- `"CATALOG"` - {
- `"CD"` - [
"CATALOG": {
"CD": [
{
- `"TITLE"` - "Empire Burlesque",
- `"ARTIST"` - "Bob Dylan",
- `"COUNTRY"` - "USA",
- `"COMPANY"` - "Columbia",
- `"PRICE"` - "10.90",
- `"YEAR"` - "1985"
"TITLE": "Empire Burlesque",
"ARTIST": "Bob Dylan",
"COUNTRY": "USA",
"COMPANY": "Columbia",
"PRICE": "10.90",
"YEAR": "1985"
},
{
- `"TITLE"` - "Hide your heart",
- `"ARTIST"` - "Bonnie Tyler",
- `"COUNTRY"` - "UK",
- `"COMPANY"` - "CBS Records",
- `"PRICE"` - "9.90",
- `"YEAR"` - "1988"
"TITLE": "Hide your heart",
"ARTIST": "Bonnie Tyler",
"COUNTRY": "UK",
"COMPANY": "CBS Records",
"PRICE": "9.90",
"YEAR": "1988"
},
...
}
@ -96,16 +95,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
Dictionary. Raw or processed structured data.

View File

@ -7,83 +7,82 @@ jc - JSON CLI output utility `YAML` file parser
Usage (cli):
$ cat foo.yaml | jc --yaml
$ cat foo.yaml | jc --yaml
Usage (module):
import jc
result = jc.parse('yaml', yaml_file_output)
import jc
result = jc.parse('yaml', yaml_file_output)
or
or
import jc.parsers.yaml
result = jc.parsers.yaml.parse(yaml_file_output)
import jc.parsers.yaml
result = jc.parsers.yaml.parse(yaml_file_output)
Schema:
YAML Document converted to a Dictionary
See https://pypi.org/project/ruamel.yaml for details
YAML Document converted to a Dictionary
See https://pypi.org/project/ruamel.yaml for details
[
{
"key1": string/int/float/boolean/null/array/object,
"key2": string/int/float/boolean/null/array/object
}
]
**Examples**:
[
{
"key1": string/int/float/boolean/null/array/object,
"key2": string/int/float/boolean/null/array/object
}
]
Examples:
$ cat istio-mtls-permissive.yaml
- `apiVersion` - "authentication.istio.io/v1alpha1"
- `kind` - "Policy"
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
- `name` - "default"
- `namespace` - "default"
name: "default"
namespace: "default"
spec:
peers:
- mtls: {}
---
- `apiVersion` - "networking.istio.io/v1alpha3"
- `kind` - "DestinationRule"
apiVersion: "networking.istio.io/v1alpha3"
kind: "DestinationRule"
metadata:
- `name` - "default"
- `namespace` - "default"
name: "default"
namespace: "default"
spec:
- `host` - "*.default.svc.cluster.local"
host: "*.default.svc.cluster.local"
trafficPolicy:
tls:
- `mode` - ISTIO_MUTUAL
mode: ISTIO_MUTUAL
$ cat istio-mtls-permissive.yaml | jc --yaml -p
[
{
- `"apiVersion"` - "authentication.istio.io/v1alpha1",
- `"kind"` - "Policy",
- `"metadata"` - {
- `"name"` - "default",
- `"namespace"` - "default"
"apiVersion": "authentication.istio.io/v1alpha1",
"kind": "Policy",
"metadata": {
"name": "default",
"namespace": "default"
},
- `"spec"` - {
- `"peers"` - [
"spec": {
"peers": [
{
- `"mtls"` - {}
"mtls": {}
}
]
}
},
{
- `"apiVersion"` - "networking.istio.io/v1alpha3",
- `"kind"` - "DestinationRule",
- `"metadata"` - {
- `"name"` - "default",
- `"namespace"` - "default"
"apiVersion": "networking.istio.io/v1alpha3",
"kind": "DestinationRule",
"metadata": {
"name": "default",
"namespace": "default"
},
- `"spec"` - {
- `"host"` - "*.default.svc.cluster.local",
- `"trafficPolicy"` - {
- `"tls"` - {
- `"mode"` - "ISTIO_MUTUAL"
"spec": {
"host": "*.default.svc.cluster.local",
"trafficPolicy": {
"tls": {
"mode": "ISTIO_MUTUAL"
}
}
}
@ -110,16 +109,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries representing the YAML documents.

View File

@ -12,76 +12,75 @@ Note: The default listing format.
Usage (cli):
$ zipinfo <archive> | jc --zipinfo
$ zipinfo <archive> | jc --zipinfo
or
or
$ jc zipinfo
$ jc zipinfo
Usage (module):
import jc
result = jc.parse('zipinfo', zipinfo_command_output)
import jc
result = jc.parse('zipinfo', zipinfo_command_output)
or
or
import jc.parsers.zipinfo
result = jc.parsers.zipinfo.parse(zipinfo_command_output)
import jc.parsers.zipinfo
result = jc.parsers.zipinfo.parse(zipinfo_command_output)
Schema:
[
{
"archive": string,
"size": integer,
"size_unit": string,
"number_entries": integer,
"number_files": integer,
"bytes_uncompressed": integer,
"bytes_compressed": integer,
"percent_compressed": float,
"files": [
{
"flags": string,
"zipversion": string,
"zipunder": string
"filesize": integer,
"type": string,
"method": string,
"date": string,
"time": string,
"filename": string
}
]
}
]
**Examples**:
[
{
"archive": string,
"size": integer,
"size_unit": string,
"number_entries": integer,
"number_files": integer,
"bytes_uncompressed": integer,
"bytes_compressed": integer,
"percent_compressed": float,
"files": [
{
"flags": string,
"zipversion": string,
"zipunder": string
"filesize": integer,
"type": string,
"method": string,
"date": string,
"time": string,
"filename": string
}
]
}
]
Examples:
$ zipinfo log4j-core-2.16.0.jar | jc --zipinfo -p
[
{
- `"archive"` - "log4j-core-2.16.0.jar",
- `"size"` - 1789565,
- `"size_unit"` - "bytes",
- `"number_entries"` - 1218,
- `"number_files"` - 1218,
- `"bytes_uncompressed"` - 3974141,
- `"bytes_compressed"` - 1515455,
- `"percent_compressed"` - 61.9,
- `"files"` - [
"archive": "log4j-core-2.16.0.jar",
"size": 1789565,
"size_unit": "bytes",
"number_entries": 1218,
"number_files": 1218,
"bytes_uncompressed": 3974141,
"bytes_compressed": 1515455,
"percent_compressed": 61.9,
"files": [
{
- `"flags"` - "-rw-r--r--",
- `"zipversion"` - "2.0",
- `"zipunder"` - "unx",
- `"filesize"` - 19810,
- `"type"` - "bl",
- `"method"` - "defN",
- `"date"` - "21-Dec-12",
- `"time"` - "23:35",
- `"filename"` - "META-INF/MANIFEST.MF"
"flags": "-rw-r--r--",
"zipversion": "2.0",
"zipunder": "unx",
"filesize": 19810,
"type": "bl",
"method": "defN",
"date": "21-Dec-12",
"time": "23:35",
"filename": "META-INF/MANIFEST.MF"
},
...
@ -105,16 +104,13 @@ def parse(data, raw=False, quiet=False)
Main text parsing function
**Arguments**:
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
- `data` - (string) text data to parse
- `raw` - (boolean) unprocessed output if True
- `quiet` - (boolean) suppress warning messages if True
**Returns**:
Returns:
List of Dictionaries. Raw or processed structured data.

View File

@ -16,14 +16,11 @@ Prints warning message for non-fatal issues. The first line is
prepended with 'jc: Warning - ' and subsequent lines are indented.
Wraps text as needed based on the terminal width.
**Arguments**:
Parameters:
message: (list) list of string lines
- `message` - (list) list of string lines
**Returns**:
Returns:
None - just prints output to STDERR
@ -39,14 +36,11 @@ Prints an error message for fatal issues. The first line is
prepended with 'jc: Error - ' and subsequent lines are indented.
Wraps text as needed based on the terminal width.
**Arguments**:
Parameters:
message: (list) list of string lines
- `message` - (list) list of string lines
**Returns**:
Returns:
None - just prints output to STDERR
@ -61,20 +55,17 @@ def compatibility(mod_name, compatible, quiet=False)
Checks for the parser's compatibility with the running OS
platform.
**Arguments**:
Parameters:
mod_name: (string) __name__ of the calling module
- `mod_name` - (string) __name__ of the calling module
- `compatible` - (list) sys.platform name(s) compatible with
compatible: (list) sys.platform name(s) compatible with
the parser. compatible options:
linux, darwin, cygwin, win32, aix, freebsd
- `quiet` - (bool) supress compatibility message if True
**Returns**:
quiet: (bool) supress compatibility message if True
Returns:
None - just prints output to STDERR
@ -89,14 +80,11 @@ def has_data(data)
Checks if the input contains data. If there are any non-whitespace
characters then return True, else return False.
**Arguments**:
Parameters:
data: (string) input to check whether it contains data
- `data` - (string) input to check whether it contains data
**Returns**:
Returns:
Boolean True if input string (data) contains non-whitespace
characters, otherwise False
@ -112,14 +100,11 @@ def convert_to_int(value)
Converts string and float input to int. Strips all non-numeric
characters from strings.
**Arguments**:
Parameters:
value: (string/integer/float) Input value
- `value` - (string/integer/float) Input value
**Returns**:
Returns:
integer/None Integer if successful conversion, otherwise None
@ -134,14 +119,11 @@ def convert_to_float(value)
Converts string and int input to float. Strips all non-numeric
characters from strings.
**Arguments**:
Parameters:
value: (string) Input value
- `value` - (string) Input value
**Returns**:
Returns:
float/None Float if successful conversion, otherwise None
@ -156,14 +138,11 @@ def convert_to_bool(value)
Converts string, integer, or float input to boolean by checking
for 'truthy' values.
**Arguments**:
Parameters:
value: (string/integer/float) Input value
- `value` - (string/integer/float) Input value
**Returns**:
Returns:
True/False False unless a 'truthy' number or string is found
('y', 'yes', 'true', '1', 1, -1, etc.)
@ -230,15 +209,12 @@ class timestamp()
Input a date-time text string of several formats and convert to a
naive or timezone-aware epoch timestamp in UTC.
**Arguments**:
Parameters:
- `datetime_string` - (str) a string representation of a
datetime_string: (str) a string representation of a
date-time in several supported formats
**Attributes**:
Attributes:
string (str) the input datetime string