A powerful command-line tool for reading, formatting, and analyzing JSON files with beautiful syntax highlighting, automatic error repair, and smart paging
Project description
jsonMore
A powerful command-line tool for reading, formatting, and analyzing JSON files with beautiful syntax highlighting, automatic error repair, and smart paging.
Installation
For Users (Recommended)
Install globally using your preferred Python package manager:
# Using pip
pip install jsonmore
# Using pipx (recommended for CLI tools)
pipx install jsonmore
# Using uv
uv pip install jsonmore
For Developers
Clone the repository and install in development mode:
git clone https://github.com/yourusername/jsonmore.git
cd jsonmore
pip install -e ".[dev]"
Quick Start 🚀
After installation, use the jsonmore command directly:
# Basic usage
jsonmore data/example.json
# Alternative: run as Python module
python -m jsonmore data/example.json
# Show structure overview only
jsonmore data/example.json --compact
# Disable colors for plain text output
jsonmore data/example.json --no-colors
Usage
Command Line Interface
# Basic file reading
jsonmore file.json
# Large files with custom size limit
jsonmore large_file.json --max-size 100
# Disable paging for direct output
jsonmore file.json --no-pager
# Compact structure overview
jsonmore file.json --compact
# Handle malformed JSON
jsonmore broken.json # Auto-repair (default)
jsonmore broken.json --no-repair # Disable auto-repair
# Custom formatting
jsonmore file.json --indent 4 --no-colors
Command Line Options
| Option | Description |
|---|---|
--no-colors |
Disable color output for plain text |
--compact |
Show only structure overview |
--max-size N |
Maximum file size in MB (default: 50) |
--indent N |
Indentation spaces (default: 2) |
--no-pager |
Disable automatic paging |
--no-repair |
Disable automatic JSON repair |
--help |
Show help message and examples |
Python API
You can also use jsonmore as a Python library:
from jsonmore import JSONReader, JSONFormatter
# Read and parse JSON file
reader = JSONReader()
result = reader.read_file('data.json')
if result['status'] == 'valid':
data = result['data']
print(f"Successfully parsed JSON with {len(data)} keys")
# Format JSON with colors
formatter = JSONFormatter(use_colors=True, indent=2)
formatted = formatter.format_json(data)
print(formatted)
🔧 JSON Repair Capabilities
The tool can automatically detect and fix common JSON syntax errors:
Supported Repairs
- Missing quotes around object keys
- Single quotes instead of double quotes
- Trailing commas in objects and arrays
- Missing commas between properties
- JavaScript-style comments (
//and/* */) - Missing braces in nested objects
- Malformed structure patterns
Example Repairs
Before (broken JSON):
{
name: "John", // Missing quotes on key
'age': 25, // Single quotes
"skills": ["Python",], // Trailing comma
"active": true, // Trailing comma
}
After (auto-repaired):
{
"name": "John",
"age": 25,
"skills": ["Python"],
"active": true
}
Package Structure
For developers and contributors, here's the package organization:
jsonmore/
├── __init__.py # Package initialization and public API
├── cli.py # Command-line interface entry point
├── colors.py # ANSI color definitions
├── core.py # Core JSON processing (JSONReader, JSONFormatter, JSONRepair)
├── utils.py # Utility functions (paging, terminal handling)
└── py.typed # Type hints marker file
Module Overview
jsonmore.cli: Command-line interface and argument parsingjsonmore.core: Main business logic for JSON reading, formatting, and repairjsonmore.colors: ANSI color code definitions for terminal outputjsonmore.utils: Utility functions for paging and terminal interactionjsonmore: Public API exports for library usage
Development API
Setting Up Development Environment
# Clone the repository
git clone https://github.com/yourusername/jsonmore.git
cd jsonmore
# Install in development mode with dev dependencies
pip install -e ".[dev]"
# Install development tools
pip install -r requirements-dev.txt
Running Tests
# Basic tests
python test_jsonmore.py
# With pytest (if installed)
pytest test_jsonmore.py -v
Code Quality
# Format code
black jsonmore/
# Lint code
flake8 jsonmore/
# Type checking
mypy jsonmore/
Building and Publishing
# Build package
python -m build
# Test on TestPyPI
python -m twine upload --repository testpypi dist/*
# Publish to PyPI
python -m twine upload dist/*
Error Handling
The tool provides multiple levels of error handling:
- Valid JSON: Normal parsing and display
- Auto-Repair: Attempts to fix common errors
- Partial Parsing: Extracts valid JSON fragments
- Raw Display: Shows content with error highlighting
Example: Partial JSON Recovery
For files containing mixed content, jsonmore will extract and display valid JSON fragments:
This is some text...
{"user": {"name": "Alice", "age": 25}}
More text here...
["apple", "banana", "cherry"]
End of file.
Output Examples
Structure Overview
JSON Structure Overview:
Type: dict
Keys: 8
Top-level keys: ['name', 'age', 'isEmployed', 'skills', 'address', 'projects']
Structure preview:
{name: "John Doe", age: int, isEmployed: bool, skills: ["Python", ... (3 items)],
address: {street: "123 Main St", city: "New York", ...}, ...}
Color-Coded Output
- Keys: Cyan
- Strings: Green
- Numbers: Yellow
- Booleans: Magenta
- Null: Gray
- Brackets/Braces: White
Error Highlighting
{
"name": "John",
►a◄ge: 30, // Error highlighted here
"city": "NYC"
}
Configuration
Paging Behavior
For long outputs, jsonmore automatically uses system pagers:
less(preferred): Full navigation with color supportmore: Basic paging functionality- Direct output: Fallback when no pager available
Pager selection respects the $PAGER environment variable.
File Size Limits
Default maximum file size: 50MB
# Increase limit to 100MB
jsonmore huge_file.json --max-size 100
Examples
Different Use Cases
# Configuration files
jsonmore config/settings.json --compact
# API responses
jsonmore api_response.json
# Large datasets
jsonmore data/large_dataset.json --max-size 200
# Debugging malformed JSON
jsonmore broken_config.json
Integration with Other Tools
# Pipe output
jsonmore data.json --no-colors --no-pager | grep "name"
# Quick structure check
jsonmore data.json --compact
# Validation in scripts
jsonmore input.json --no-repair || echo "File is invalid"
Technical Details
Performance
- Fast parsing: Uses Python's built-in
jsonmodule - Memory efficient: Streams large files when possible
- Smart paging: Only activates for outputs longer than terminal height
Dependencies
- Python 3.8+ (uses f-strings and type hints)
- Standard library only (no external dependencies)
- Optional:
less/morefor enhanced paging
Exit Codes
- 0: Success
- 1: File not found, parsing error, or size limit exceeded
- 130: User interrupted (Ctrl+C)
Contributing
We welcome contributions! Here's how to get started:
- Fork the repository on GitHub
- Create a feature branch:
git checkout -b feature-name - Make your changes and add tests
- Run the test suite:
python test_jsonmore.py - Submit a pull request
Guidelines
- Maintain compatibility with Python 3.8+
- Follow the existing code style (use
blackfor formatting) - Add tests for new features
- Update documentation as needed
License
MIT License - see LICENSE file for details.
Acknowledgments
- Built with Python's standard library for maximum compatibility
- Inspired by tools like
jq,bat, andless - Thanks to the JSON specification and repair techniques community
Happy JSON reading!
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jsonmore-1.0.0.tar.gz.
File metadata
- Download URL: jsonmore-1.0.0.tar.gz
- Upload date:
- Size: 25.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
821cf9d1183257327f671c22ac1337bcb0bb5f94a0ce01097533ee0abad7d9aa
|
|
| MD5 |
6fdf783c64eb17d9f482a72b1e969bba
|
|
| BLAKE2b-256 |
602e4a9f6f4f205487fa0b3cb89752d3a5057e1a42c08cbf3c42e9fb66128506
|
File details
Details for the file jsonmore-1.0.0-py3-none-any.whl.
File metadata
- Download URL: jsonmore-1.0.0-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9b73614efa4757974c528b004713023d8c1ad0f4cf10aee7016b944bcda5df7
|
|
| MD5 |
3f8818a8cb7c059470d5365ca57dca4e
|
|
| BLAKE2b-256 |
1145b348bbdead66770888f18e16c1b5c9ce5afd5594eb58e1e231644f4ed651
|