Skip to main content

Budget‑constrained JSON preview renderer (Python bindings)

Project description

headson

Head/tail for JSON — but structure‑aware. Get a compact preview that shows both the shape and representative values of your data, all within a strict character budget.

Available as:

Install

Using Cargo:

cargo install headson

From source:

cargo build --release
target/release/headson --help

Features

  • Budgeted output: specify exactly how much JSON you want to see
  • Multiple output formats : json (machine‑readable), pseudo (human‑friendly), js (valid JavaScript, most detailed metadata).
  • Multiple inputs: preview many files at once with a shared or per‑file budget.
  • Fast: can process gigabyte-scale files in seconds (mostly disk-constrained)
  • Available as a CLI app and as a Python library

Fits into command line workflows

If you’re comfortable with tools like head and tail, use headson when you want a quick, structured peek into a JSON file without dumping the entire thing.

  • head/tail operate on bytes/lines - their output is not optimized for tree structures
  • jq you need to craft filters to preview large JSON files
  • headson is like head/tail for trees: zero config but it keeps structure and represents content as much as possible

Usage

headson [FLAGS] [INPUT...]
  • INPUT (optional, repeatable): file path(s). If omitted, reads JSON from stdin. Multiple input files are supported.
  • Prints the preview to stdout. On parse errors, exits non‑zero and prints an error to stderr.

Common flags:

  • -n, --budget <BYTES>: per‑file output budget. When multiple input files are provided, the total budget equals <BYTES> * number_of_inputs.
  • -N, --global-budget <BYTES>: total output budget across all inputs. Useful when you want a fixed-size preview across many files (may omit entire files). Mutually exclusive with --budget.
  • -f, --template <json|pseudo|js>: output style (default: pseudo)
  • -m, --compact: no indentation, no spaces, no newlines
  • --no-newline: single line output
  • --no-space: no space after : in objects
  • --indent <STR>: indentation unit (default: two spaces)
  • --string-cap <N>: max graphemes to consider per string (default: 500)
  • --tail: prefer the end of arrays when truncating. Strings are unaffected. In pseudo/js templates the omission marker appears at the start; json remains strict JSON with no annotations.

Notes:

  • With multiple input files:
    • JSON template outputs a single JSON object keyed by the input file paths.
    • Pseudo and JS templates render file sections with human-readable headers when newlines are enabled.
      • If you use --compact or --no-newline (both disable newlines), fileset output falls back to standard inline rendering (no per-file headers) to remain compact.
    • Using --global-budget may truncate or omit entire files to respect the total budget.
    • The tool finds the largest preview that fits the budget; if even the tiniest preview exceeds it, you still get a minimal, valid preview.
    • When passing file paths, directories and binary files are ignored; a notice is printed to stderr for each (e.g., Ignored binary file: ./path/to/file). Stdin mode reads the stream as-is.

Quick one‑liners:

  • Peek a big JSON stream (keeps structure):

    zstdcat huge.json.zst | headson -n 800 -f pseudo
    
  • Many files with a fixed overall size:

    headson -N 1200 -f json logs/*.json
    
  • Glance at a file, JavaScript‑style comments for omissions:

    headson -n 400 -f js data.json
    

Show help:

headson --help

Examples: head vs headson

Input:

{"users":[{"id":1,"name":"Ana","roles":["admin","dev"]},{"id":2,"name":"Bo"}],"meta":{"count":2,"source":"db"}}

Naive cut (can break mid‑token):

jq -c . users.json | head -c 80
# {"users":[{"id":1,"name":"Ana","roles":["admin","dev"]},{"id":2,"name":"Bo"}],"me

Structured preview with headson (pseudo):

headson -n 120 -f pseudo users.json
# {
#   users: [
#     { id: 1, name: "Ana", roles: [ "admin", … ] },
#     …
#   ]
#   meta: { count: 2, … }
# }

Machine‑readable preview (json):

headson -n 120 -f json users.json
# {"users":[{"id":1,"name":"Ana","roles":["admin"]}],"meta":{"count":2}}

Python Bindings

A thin Python extension module is available on PyPI as headson.

  • Install: pip install headson (ABI3 wheels for Python 3.10+ on Linux/macOS/Windows).
  • API:
    • headson.summarize(text: str, *, template: str = "pseudo", character_budget: int | None = None, tail: bool = False) -> str
      • template: one of "json" | "pseudo" | "js"
      • character_budget: maximum output size in characters (default: 500)
    • tail: prefer the end of arrays when truncating; strings unaffected. Affects only display templates (pseudo/js); json remains strict.

Example:

import json
import headson

data = {"foo": [1, 2, 3], "bar": {"x": "y"}}
preview = headson.summarize(json.dumps(data), template="json", character_budget=200)
print(preview)

# Prefer the tail of arrays (annotations show in pseudo/js only)
print(
    headson.summarize(
        json.dumps(list(range(100))),
        template="pseudo",
        character_budget=80,
        tail=True,
    )
)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

headson-0.4.0.tar.gz (36.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

headson-0.4.0-cp310-abi3-win_amd64.whl (224.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

headson-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333.0 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

headson-0.4.0-cp310-abi3-macosx_11_0_arm64.whl (284.0 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file headson-0.4.0.tar.gz.

File metadata

  • Download URL: headson-0.4.0.tar.gz
  • Upload date:
  • Size: 36.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.9.6

File hashes

Hashes for headson-0.4.0.tar.gz
Algorithm Hash digest
SHA256 5813d4b152ea85c2711d4f0da8ccdee8fe2a51aba1930900c4453b08226e9390
MD5 4802b8b5806d74c3271f594f492180b1
BLAKE2b-256 fe9bb655f3c376c21a76846866fb56df1613e072b1d76dd82a71f854d14142a3

See more details on using hashes here.

File details

Details for the file headson-0.4.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: headson-0.4.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 224.2 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.9.6

File hashes

Hashes for headson-0.4.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3122038c3b19fd02c934d47046542d20b4557bef2d889d4e262b77070b4f87a3
MD5 4b5e6926374a3ab3803e5711e883738c
BLAKE2b-256 63d3e5c934130e8d775b0bd802bd4e98d3dce323c3169b47dd7f49e5e0f7c55f

See more details on using hashes here.

File details

Details for the file headson-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for headson-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7159ac21641052e38112bc7de7d15e893f86f03de9159b8aeaf054c5478fb994
MD5 f4954b67b1204b441996b534575c59c3
BLAKE2b-256 bf406419452f6b0ee33fca80f596fe3ff7ea844acc53b0f801670a118ae74a87

See more details on using hashes here.

File details

Details for the file headson-0.4.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for headson-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c3a82b8abb27e6c90dfa3aee6420baa0ca3299ac416fc78c76b08c872b4393ac
MD5 2ef72d5c09111d6bf52233a2154be62d
BLAKE2b-256 f0464dec3474edc764852a681461853501a1038c0e28989e0358c0fc097c6bdd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page