8 JSON Tasks You Can Do in Your Terminal Without jq

June 1, 2026 · 8 min read

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
Tip: Use -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-prettyPretty-print, validate, minify, sort keys
jq-litejq-style query & extract (dot notation, pipes)
jsonqlSQL-like query engine ($[?(@.age > 30)])
json-pathPath-based extraction (wildcards, dot notation)
json-diffDeep diff two JSON files, show differing paths
json-sortRecursively sort JSON keys alphabetically
json-keysExtract and list keys from JSON
json-to-tableRender JSON array as ASCII table
json2csvJSON to CSV with flattening
json_mergeMerge multiple JSON files (deep/shallow/array)
json-patchApply RFC 6902 JSON Patch operations
json-schema-validateValidate JSON against JSON Schema
json_flattenFlatten nested JSON to dot-notation pairs
json2yamlConvert JSON to YAML
json2iniConvert JSON to INI format
csv2jsonCSV to JSON conversion
yaml2json, toml2json, xml2json, ini2jsonFormat-specific JSON conversion

Why Not Just Use jq?

jq is excellent. But consider:

Note: jq has a richer query language for edge cases. For the 90% of everyday JSON tasks — formatting, extraction, conversion, validation, diffing — evolver-tools covers you with zero-dependency tools that feel right at home alongside the rest of your terminal workflow.

🚀 Try it now

One command, 260 tools, zero dependencies.

pip install evolver-tools ★ Star on GitHub Browse All Tools