Json Codec
JSON Encoder/Decoder — tools/json_codec.py
Section titled “JSON Encoder/Decoder — tools/json_codec.py”A focused JSON encoder/decoder for axon-web, providing a testable artifact for the upcoming M14 HTTP server contract.
API Reference
Section titled “API Reference”Functions
Section titled “Functions”encode(obj, *, indent=None, sort_keys=False) -> str
Section titled “encode(obj, *, indent=None, sort_keys=False) -> str”Encode a Python object to a JSON string.
- Strict validation: rejects
NaN,Infinity, and non-serializable types - Raises:
JsonEncodeErroron failure - Parameters:
indent: Pretty-print indent level (None for compact)sort_keys: Sort dictionary keys alphabetically
decode(s: str | bytes) -> Any
Section titled “decode(s: str | bytes) -> Any”Decode a JSON string/bytes to a Python object.
- Raises:
JsonDecodeErroron malformed input - Parameters:
s: JSON string or bytes
encode_iter(obj) -> Iterator[str]
Section titled “encode_iter(obj) -> Iterator[str]”Streaming encoder — yields JSON chunks for large objects.
timed_encode(obj, **kwargs) -> tuple[str, float]
Section titled “timed_encode(obj, **kwargs) -> tuple[str, float]”Encode with timing — returns (json_str, duration_ms).
timed_decode(s) -> tuple[Any, float]
Section titled “timed_decode(s) -> tuple[Any, float]”Decode with timing — returns (obj, duration_ms).
stats() -> dict
Section titled “stats() -> dict”Return codec diagnostics (version, stdlib version).
Exception Types
Section titled “Exception Types”| Class | Base | Description |
|---|---|---|
JsonError | ValueError | Base class for all JSON codec errors |
JsonEncodeError | JsonError | Raised when encoding fails |
JsonDecodeError | JsonError | Raised when decoding fails |
Error Handling
Section titled “Error Handling”The codec uses strict validation:
from tools.json_codec import encode, JsonEncodeError
try: encode(float("nan"))except JsonEncodeError as e: print(e) # failed to encode float: failed to encode float: outliers must be a finite numberPerformance Notes
Section titled “Performance Notes”- Encode/decode timing utilities via
timed_encode()andtimed_decode() - Streaming encoder for large payloads via
encode_iter() - Built on stdlib
json— no external dependencies
Future Work (M14)
Section titled “Future Work (M14)”When the real M14 implementation lands:
- Replace
tools/json_codec.pywithaxon_web.jsonmodule - Update imports in consuming code
- Run full integration tests against HTTP server
- Benchmark against real-world payload distributions