An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
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:
libxo on FreeBSD
powershell
blog: linux apps should have a json flag
Hacker News discussion
Reddit discussion
Use Cases:
Bash scripting
Ansible command output parsing
Saltstack command output parsing
Nornir command output parsing
FortiSOAR command output parsing
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)
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
--apachectl
apachectl -S 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
--authorized-keys
~/.ssh/authorized_keys file parser
details
--blkid
blkid command parser
details
--bluetoothctl
bluetoothctl command parser
details
--cbt
cbt (Google Bigtable) command parser
details
--cef
CEF string parser
details
--cef-s
CEF string streaming parser
details
--certbot
certbot command parser
details
--chage
chage --list command parser
details
--cksum
cksum and sum command parser
details
--clf
Common and Combined Log Format file parser
details
--clf-s
Common and Combined Log Format file streaming parser
details
--conntrack
conntrack command parser
details
--crontab
crontab command and file parser
details
--crontab-u
crontab file parser with user support
details
--csv
CSV file parser
details
--csv-ih
CSV implicit header file parser
details
--csv-s
CSV file streaming parser
details
--csv-ih-s
CSV implicit header file streaming parser
details
--cur
Read the full README on GitHub