feat: add script to pretty-print JSON Lines (.jsonl) files with indentation option

Co-authored-by: aider (o3) <aider@aider.chat>
This commit is contained in:
Mark Eaton
2025-09-17 19:08:44 -04:00
co-authored by aider
parent ea0e6bb5b6
commit 089faff3a3
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env python3
"""
Pretty-print a JSON Lines (.jsonl) file.
Usage
-----
python scripts/jsonl_pretty_print.py path/to/file.jsonl [--indent 2]
The script reads each line, parses it as JSON, and writes a
human-readable representation to stdout. Redirect or pipe as needed.
Example
-------
python scripts/jsonl_pretty_print.py data.jsonl --indent 4 > pretty.json
"""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Pretty-print a .jsonl file.")
parser.add_argument(
"jsonl_path",
type=Path,
help="Path to the input .jsonl file",
)
parser.add_argument(
"--indent",
type=int,
default=2,
help="Number of spaces to indent (default: 2)",
)
return parser.parse_args()
def pretty_print_jsonl(path: Path, indent: int) -> None:
if not path.exists():
sys.exit(f"Error: {path} does not exist")
with path.open("r", encoding="utf-8") as fp:
for idx, line in enumerate(fp, start=1):
line = line.strip()
if not line:
continue # skip empty lines
try:
obj = json.loads(line)
except json.JSONDecodeError as exc:
sys.exit(f"JSON decode error on line {idx}: {exc}") # fail fast
# Dump the pretty JSON followed by a newline separator
print(json.dumps(obj, indent=indent, ensure_ascii=False, sort_keys=True))
print() # blank line between records for readability
def main() -> None:
args = parse_args()
pretty_print_jsonl(args.jsonl_path, args.indent)
if __name__ == "__main__":
main()