plugins/devops/python-tools/skills/python-json-parsing/SKILL.md
Python JSON parsing best practices covering performance optimization (orjson/msgspec), handling large files (streaming/JSONL), security (injection prevention), and advanced querying (JSONPath/JMESPath).
npx skillsauth add basher83/lunar-claude python-json-parsingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Comprehensive guide to JSON parsing in Python with focus on performance, security, and scalability.
import json
# Parse JSON string
data = json.loads('{"name": "Alice", "age": 30}')
# Parse JSON file
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
# Write JSON file
with open("output.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=2)
Key Rule: Always specify encoding="utf-8" when reading/writing files.
Use this skill when:
| Library | Serialize (s) | Deserialize (s) | Best For | |---------|---------------|-----------------|----------| | orjson | 0.42 | 1.27 | FastAPI, web APIs (3.9x faster) | | msgspec | 0.49 | 0.93 | Maximum performance (1.7x faster deserialization) | | json (stdlib) | 1.62 | 1.62 | Universal compatibility | | ujson | 1.41 | 1.85 | Drop-in replacement (2x faster) |
Recommendation:
# High-performance libraries
pip install orjson msgspec ujson
# Advanced querying
pip install jsonpath-ng jmespath
# Streaming large files
pip install ijson
# Schema validation
pip install jsonschema
For files > 100MB, avoid loading into memory.
Convert large JSON arrays to line-delimited format:
# Stream process JSONL
with open("large.jsonl", "r") as infile, open("output.jsonl", "w") as outfile:
for line in infile:
obj = json.loads(line)
obj["processed"] = True
outfile.write(json.dumps(obj) + "\n")
import ijson
# Process large JSON without loading into memory
with open("huge.json", "rb") as f:
for item in ijson.items(f, "products.item"):
process(item) # Handle one item at a time
See: patterns/streaming-large-json.md
Critical Rules:
json.loads(), never eval()jsonschema" and \)Vulnerable Code:
# NEVER DO THIS
username = request.GET['username'] # User input: admin", "role": "admin
json_string = f'{{"user":"{username}","role":"user"}}'
# Result: privilege escalation
Secure Code:
# Use json.dumps for serialization
data = {"user": username, "role": "user"}
json_string = json.dumps(data) # Properly escaped
See: anti-patterns/security-json-injection.md, anti-patterns/eval-usage.md
Extract data from nested JSON without complex loops:
import jsonpath_ng as jp
data = {
"products": [
{"name": "Apple", "price": 12.88},
{"name": "Peach", "price": 27.25}
]
}
# Filter by price
query = jp.parse("products[?price>20].name")
results = [match.value for match in query.find(data)]
# Output: ["Peach"]
Key Operators:
$ - Root selector.. - Recursive descendant* - Wildcard[?<predicate>] - Filter (e.g., [?price > 20])[start:end:step] - Array slicingSee: patterns/jsonpath-querying.md
Handle datetime, UUID, Decimal, and custom classes:
from datetime import datetime
import json
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
if isinstance(obj, set):
return list(obj)
return super().default(obj)
# Usage
data = {"timestamp": datetime.now(), "tags": {"python", "json"}}
json_str = json.dumps(data, cls=CustomEncoder)
See: patterns/custom-object-serialization.md
separators=(',', ':'))indent=2)eval() for JSON parsingjsonschemajson.dumps() to prevent injectionPerformance:
reference/python-json-parsing-best-practices-2025.md - Comprehensive research with benchmarksPatterns:
patterns/streaming-large-json.md - ijson and JSONL strategiespatterns/custom-object-serialization.md - Handle datetime, UUID, custom classespatterns/jsonpath-querying.md - Advanced nested data extractionSecurity:
anti-patterns/security-json-injection.md - Prevent injection attacksanti-patterns/eval-usage.md - Why never to use eval()Examples:
examples/high-performance-parsing.py - orjson and msgspec codeexamples/large-file-streaming.py - Streaming with ijsonexamples/secure-validation.py - jsonschema validationTools:
tools/json-performance-benchmark.py - Benchmark different librariestesting
Audit and improve CLAUDE.md files in repositories. Use when user asks to check, audit, update, improve, or fix CLAUDE.md files. Scans for all CLAUDE.md files, evaluates quality against templates, outputs quality report, then makes targeted updates. Also use when the user mentions "CLAUDE.md maintenance" or "project memory optimization".
tools
Operational tooling for Talos Linux Kubernetes clusters via Sidero Omni with Proxmox infrastructure provider, covering machine classes, CEL storage selectors, and provider lifecycle management.
tools
Best practices for git workflow automation including atomic commits, branch naming, conventional commit format, and changelog generation.
tools
Summarize the current state of the git repository