HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
kellyjonbrazil
jc
Python2020–2025
kellyjonbrazil / jc

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.

41Distinct people
55Mentions
0Explicit recommenders
8.7KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

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.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year55 dated mentions

Observed mentions: 2020-02-21 12:21:19 UTC to 2025-11-12 02:48:46 UTC.

0510152020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 16 mentions; 2 submissions, 14 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 13 mentions; 5 submissions, 8 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 12 mentions; 0 submissions, 12 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 9 mentions; 1 submissions, 8 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC16214
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC1358
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC12012
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC918
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC303
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC202

From the project README

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

What Hacker News says

55 sources
I guess I don't see those as big downsides because I don't think people usually want binary data or quoted strings back from a CLI command, nor do they want column oriented output, nor "user friendly" tables. Answering --help with JSON is a good example, how bad is it really if the response is JSON? Well, using less works fine still and you can still grep if you want simple substring search. Wanting a section is probably more common, so maybe you'd "grep" for a subcommand with `jq .subcommand` or an option with `jq .subcommand.option`, and maybe get yourself a fancier, JSON-friendly version of less that handles escaped quotes and newlines. Tables and tab-or-space delimited output overflow char limits, force the command-generator to figure out character wrapping, and so on. Now you need a library to generate CLI help properly, but if y
Read the rest
ou're going to have a library why not just spit JSON and decouple completely from display details to let the consumer handle it. Structured output by default just makes sense for practically everything except `cat`. And while your markdown files or csv files might have quoted strings, looking at the raw files isn't something people really want from shells or editors.. they want something "rendered" in one way or another, for example with syntax highlighting. Basically in 2025 neither humans nor machines benefit much from unstructured raw output. Almost any CLI that does this needs to be paired with a parser (like https://github.com/kellyjonbrazil/jc) and/or a renderer (like https://github.com/charmbracelet/glow). If no such pairing is available then it pushes many people to separately reinvent parsers badly. JSON's not perfect but (non-minified) it's human-readable enough to address the basic issues here without jumping all the way towards binary or (shudder) HTML
In The terminal of the future
the thing with the coreutils is they provide basic core functionality; you dont need bash on your system - `ls` is not bash (and then you still end up with busybox where json still would not be part of ls). add more utilities to your system to do more complex logic; ive used similar apps to this in the past: https://github.com/kellyjonbrazil/jc there's also using zero terminiated lines in ls with `--zero`; then piping that to a number of apps which also support similar (read,xargs,ect) might also checkout powershell on linux which may suite your needs where instead of string manipulation, everything is a class object
In Why not parse `ls` and what to do instead
> I'd love to see programs communicate through a typed JSON/proto format that shed enough details to make this more independent, and get useful shell command structuring/completion or full blown GUIs from simply introspecting the expected input and output types. You should try PowerShell. It's basically Microsoft's .NET ecosystem molded into an interactive command line. I'm not entirely sure if PoweShell can make full use of the static types that build up its core, but its ability to exchange objects in the command line is almost unmatched. On Linux you can use `jc` (https://github.com/kellyjonbrazil/jc) combined with `jq` (https://jqlang.github.io/jq/) to glue together command lines, but that's still two extra steps you need to deal with compared to PS's built-in capabilities.
In Gooey: Turn almost any Python command line program into a full GUI application
> If `ls` changed its output format in any way (unless behind a flag) it'd break a heck of a lot of bash scripts. The `jc` ("CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON") documentation[1] & parser[2] for `ls` also demonstrate that reliable & cross-platform parsing of even the current output can be non-trivial based on filenames encountered, flags used & host platform--which means there's probably a non-zero number of bash scripts that are already broken but they don't know it. [1] https://kellyjonbrazil.github.io/jc/docs/parsers/ls [2] https://github.com/kellyjonbrazil/jc/blob/4cd721be8595db52b6...
In The case for Nushell
> I wanted to write some wrappers for the standard commands that automatically did all this via `jq`. If you're not already aware of it, you may wish to check out `jc`[0] which describes itself as a "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..." The `jc` documentation[1] & parser[2] for `ls` also demonstrates that reliable & cross-platform parsing of even "basic" commands can be non-trivial. [0] https://github.com/kellyjonbrazil/jc [1] https://kellyjonbrazil.github.io/jc/docs/parsers/ls [2] https://github.com/kellyjonbrazil/jc/blob/4cd721be8595db52b6...
In The case for Nushell

Showing the 15 most recent of 55 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.