SkillAgentSearch skills...

Jc

CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.

Install / Use

/learn @kellyjonbrazil/Jc

README

Pypi

Check out the jc Python package documentation for developers

Try the jc web demo and REST API

jc is available as an Ansible filter plugin in the community.general collection. See this blog post for an example.

JC

JSON Convert

jc JSONifies the output of many CLI tools, file-types, and common strings for easier parsing in scripts. See the Parsers section for supported commands, file-types, and strings.

dig example.com | jc --dig
[{"id":38052,"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}},"question":
{"name":"example.com.","class":"IN","type":"A"},"answer":[{"name":
"example.com.","class":"IN","type":"A","ttl":39049,"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:09:00 PDT 2021","rcvd":56,"when_epoch":1618614540,
"when_epoch_utc":null}]

This allows further command-line processing of output with tools like jq or jello by piping commands:

$ dig example.com | jc --dig | jq -r '.[].answer[].data'
93.184.216.34

or using the alternative "magic" syntax:

$ jc dig example.com | jq -r '.[].answer[].data'
93.184.216.34

jc can also be used as a python library. In this case the returned value will be a python dictionary, a list of dictionaries, or even a lazy iterable of dictionaries instead of JSON:

>>> import subprocess
>>> import jc
>>>
>>> cmd_output = subprocess.check_output(['dig', 'example.com'], text=True)
>>> data = jc.parse('dig', cmd_output)
>>>
>>> data[0]['answer']
[{'name': 'example.com.', 'class': 'IN', 'type': 'A', 'ttl': 29658, 'data':
'93.184.216.34'}]

For jc Python package documentation, use help('jc'), help('jc.lib'), or see the online documentation.

Two representations of the data are available. The default representation uses a strict schema per parser and converts known numbers to int/float JSON values. Certain known values of None are converted to JSON null, known boolean values are converted, and, in some cases, additional semantic context fields are added.

To access the raw, pre-processed JSON, use the -r cli option or the raw=True function parameter in parse() when using jc as a python library.

Schemas for each parser can be found at the documentation link beside each Parser below.

Release notes can be found in the Releases section on Github.

Why Would Anyone Do This!?

For more information on the motivations for this project, please see my blog post on Bringing the Unix Philosophy to the 21st Century and my interview with Console.

See also:

Use Cases:

Installation

There are several ways to get jc. You can install via pip, OS package repositories, or by downloading the correct binary for your architecture and running it anywhere on your filesystem.

Pip (macOS, linux, unix, Windows)

Pypi

pip3 install jc

OS Package Repositories

| OS | Command | |--------------------------------------|-------------------------------------------------------------------------------| | Debian/Ubuntu linux | apt-get install jc | | Fedora linux | dnf install jc | | openSUSE linux | zypper install jc | | Arch linux | pacman -S jc | | NixOS linux | nix-env -iA nixpkgs.jc or nix-env -iA nixos.jc | | Guix System linux | guix install jc | | Gentoo Linux | emerge dev-python/jc | | Photon linux | tdnf install jc | | macOS | brew install jc | | FreeBSD | portsnap fetch update && cd /usr/ports/textproc/py-jc && make install clean | | Ansible filter plugin | ansible-galaxy collection install community.general | | FortiSOAR connector | Install from FortiSOAR Connector Marketplace |

For more OS Packages, see https://repology.org/project/jc/versions.

Binaries

For precompiled binaries, see Releases on Github.

Usage

jc accepts piped input from STDIN and outputs a JSON representation of the previous command's output to STDOUT.

COMMAND | jc [SLICE] [OPTIONS] PARSER
cat FILE | jc [SLICE] [OPTIONS] PARSER
echo STRING | jc [SLICE] [OPTIONS] PARSER

Alternatively, the "magic" syntax can be used by prepending jc to the command to be converted or in front of the absolute path for Proc files. Options can be passed to jc immediately before the command or Proc file path is given. (Note: command aliases and shell builtins are not supported)

jc [SLICE] [OPTIONS] COMMAND
jc [SLICE] [OPTIONS] /proc/<path-to-procfile>

The JSON output can be compact (default) or pretty formatted with the -p option.

Parsers

| Argument | Command or Filetype | Documentation | |-------------------|---------------------------------------------------------|----------------------------------------------------------------------------| | --acpi | acpi command parser | details | | --airport | airport -I command parser | details | | --airport-s | airport -s command parser | details | | --amixer | amixer command parser | details | | --apt-cache-show | apt-cache show command parser | details | | --apt-get-sqq | apt-get -sqq command parser | details | | --arp | arp command parser | details | | --asciitable | ASCII and Unicode table parser | details | | --asciitable-m | multi-line ASCII and Unicode table parser | details | | --blkid | blkid command parser | details | | --bluetoothctl | bluetoothctl command parser | details | | --cbt | cbt (Google Bigtable) command parser | details | | --cef

View on GitHub
GitHub Stars8.6k
CategoryDevelopment
Updated1d ago
Forks225

Languages

Python

Security Score

100/100

Audited on Mar 23, 2026

No findings