jq is the go-to tool for JSON in the terminal. It's powerful, but it's also an extra install — and its query syntax has a learning curve that can feel like a DSL unto itself.
If you already have Python (and who doesn't?), evolver-tools gives you 26 JSON tools out of the box — all zero-dependency, all available with a single pip install. From formatting and validating to querying and converting, here are 8 practical JSON tasks you can do entirely from the terminal, without installing jq.
Let's use a sample file throughout these examples:
# data.json
{
"users": [
{"name": "Alice", "age": 30, "role": "dev", "skills": ["Python", "Rust"]},
{"name": "Bob", "age": 28, "role": "ops", "skills": ["Terraform", "K8s"]},
{"name": "Carol", "age": 35, "role": "pm", "skills": ["Agile", "Jira"]},
{"name": "Dave", "age": 42, "role": "dev", "skills": ["Go", "Python"]}
]
}
1. Pretty-Print Ugly JSON
Maybe the most common JSON task: turning a single-line API response into readable, indented output.
Using: evtool json-pretty
$ curl -s https://api.example.com/users | evtool json-pretty
{
"users": [
{
"name": "Alice",
"age": 30,
"role": "dev"
}
]
}
json-pretty also handles validation (--validate), minification (--minify), key sorting (--sort), and custom indentation (--indent=4). One tool, six modes.
2. Extract a Specific Value
Need just one field from a nested structure? Both jq-lite and json-path let you drill into objects with simple dot notation.
$ evtool jq-lite '.users[0].name' data.json "Alice" $ evtool json-path data.json --path='users[0].name' "Alice" # Raw output (no JSON quoting): $ evtool jq-lite -r '.users[0].name' data.json Alice
json-path also supports wildcards for iterating over arrays:
$ evtool json-path data.json --path='users[*].name' "Alice" "Bob" "Carol" "Dave"
3. Filter and Query with SQL-like Syntax
For complex queries — filter by condition, select specific fields, sort results — jsonql provides SQL-like expressions that are often more intuitive than jq pipes.
$ evtool jsonql data.json 'users[?(@.age > 30)].name' "Carol" "Dave" $ evtool jsonql data.json 'users[?(@.role == "dev")]' -c [{"name":"Alice","age":30,"role":"dev","skills":["Python","Rust"]},{"name":"Dave","age":42,"role":"dev","skills":["Go","Python"]}] $ evtool jsonql data.json 'users[*].email' -r # Raw output when field is missing — handy for quick extraction
-r for raw strings, -c for compact output, and -k to extract only keys. The syntax $[?(@.age > 30)] works for top-level arrays too.
4. Diff Two JSON Files
Comparing JSON responses is essential during API development or configuration drift detection.
$ evtool json-diff data.json data-modified.json Different at path: users[1].age left : 28 right: 29 Different at path: users[3].skills left : ["Go","Python"] right: ["Go","Python","Rust"] 2 difference(s) found $ evtool json-diff data.json data.json No differences — files are identical.
Zero-dependency, zero-config. Handles nested objects, arrays, and type changes gracefully.
5. Sort Keys Alphabetically
When you need consistent output for diffs, code reviews, or just want your JSON to look tidy.
$ evtool json-sort data.json
{
"users": [
{
"age": 30,
"name": "Alice",
"role": "dev",
"skills": ["Python", "Rust"]
},
...
]
}
Recursively sorts all object keys. Combine with json-pretty for consistent formatting.
6. Render JSON as a Table
When you want to see your data in rows and columns — especially useful for arrays of objects with consistent schemas.
$ evtool json-to-table data.json | name | age | role | skills | |-------|-----|------|-----------------------| | Alice | 30 | dev | ['Python', 'Rust'] | | Bob | 28 | ops | ['Terraform', 'K8s'] | | Carol | 35 | pm | ['Agile', 'Jira'] | | Dave | 42 | dev | ['Go', 'Python'] |
Great for quickly scanning data or pasting into documentation. json-to-table expects a top-level array; use jq-lite or jsonql to extract one first if your data is nested.
7. Convert JSON to CSV
When you need to get your JSON data into a spreadsheet or data analysis tool.
$ evtool json2csv data.json name,age,role Alice,30,dev Bob,28,ops Carol,35,pm Dave,42,dev # With nested object flattening: $ evtool json2csv data.json --flatten # Custom delimiter (e.g., tab-separated): $ evtool json2csv data.json --delimiter $'\t'
Pair with evtool csv-stats for instant statistical analysis of your JSON-derived data — no pandas, no Jupyter.
8. Merge Multiple JSON Files
Configuration merging, API response combination, or just joining data from multiple sources.
$ evtool json_merge base.json override.json # Shallow merge (default): top-level keys, later files win $ evtool json_merge base.json override.json --strategy deep # Deep merge: nested dicts are merged recursively $ evtool json_merge base.json override.json --strategy array # Array mode: arrays are concatenated instead of replaced
Three merge strategies cover the vast majority of real-world use cases. Use --output merged.json to write directly to file.
Bonus: Validate Against JSON Schema
When you need to ensure your data conforms to a specification.
$ evtool json-schema-validate data.json schema.json ✓ Valid: data.json conforms to schema.json $ evtool json-schema-validate bad-data.json schema.json ✗ Validation errors: - /users/2/age: expected type number, got string
Quick Reference: All 26 JSON Tools
For the curious, here's everything in the JSON category:
| Tool | Description |
|---|---|
json-pretty | Pretty-print, validate, minify, sort keys |
jq-lite | jq-style query & extract (dot notation, pipes) |
jsonql | SQL-like query engine ($[?(@.age > 30)]) |
json-path | Path-based extraction (wildcards, dot notation) |
json-diff | Deep diff two JSON files, show differing paths |
json-sort | Recursively sort JSON keys alphabetically |
json-keys | Extract and list keys from JSON |
json-to-table | Render JSON array as ASCII table |
json2csv | JSON to CSV with flattening |
json_merge | Merge multiple JSON files (deep/shallow/array) |
json-patch | Apply RFC 6902 JSON Patch operations |
json-schema-validate | Validate JSON against JSON Schema |
json_flatten | Flatten nested JSON to dot-notation pairs |
json2yaml | Convert JSON to YAML |
json2ini | Convert JSON to INI format |
csv2json | CSV to JSON conversion |
yaml2json, toml2json, xml2json, ini2json | Format-specific JSON conversion |
Why Not Just Use jq?
jq is excellent. But consider:
- jq is a separate install — not everyone has brew/apt installed or has permission to install it.
- Python is everywhere — macOS ships with it, Linux distros include it, Windows users can get it in seconds.
- One environment to manage — with evolver-tools, pip is your only toolchain. No npm, no brew, no apt.
- Ecosystem depth — the JSON tools are part of a 260-tool collection. Once you have evolver-tools, you also have CSV tools, system monitoring, network diagnostics, and more.
🚀 Try it now
One command, 260 tools, zero dependencies.
pip install evolver-tools
★ Star on GitHub
Browse All Tools