Skip to main content

jiter

CI pypi versions license

This is a standalone version of the JSON parser used in pydantic-core. The recommendation is to only use this package directly if you do not use pydantic.

The API is extremely minimal:

def from_json(
    json_data: bytes,
    /,
    *,
    allow_inf_nan: bool = True,
    cache_mode: Literal[True, False, 'all', 'keys', 'none'] = 'all',
    partial_mode: Literal[True, False, 'off', 'on', 'trailing-strings'] = False,
    catch_duplicate_keys: bool = False,
    float_mode: Literal['float', 'decimal', 'lossless-float'] = 'float',
) -> Any:
    """
    Parse input bytes into a JSON object.

    Arguments:
        json_data: The JSON data to parse
        allow_inf_nan: Whether to allow infinity (`Infinity` an `-Infinity`) and `NaN` values to float fields.
            Defaults to True.
        cache_mode: cache Python strings to improve performance at the cost of some memory usage
            - True / 'all' - cache all strings
            - 'keys' - cache only object keys
            - False / 'none' - cache nothing
        partial_mode: How to handle incomplete strings:
            - False / 'off' - raise an exception if the input is incomplete
            - True / 'on' - allow incomplete JSON but discard the last string if it is incomplete
            - 'trailing-strings' - allow incomplete JSON, and include the last incomplete string in the output
        catch_duplicate_keys: if True, raise an exception if objects contain the same key multiple times
        float_mode: How to return floats: as a `float`, `Decimal` or `LosslessFloat`

    Returns:
        Python object built from the JSON input.
    """


def cache_clear() -> None:
    """
    Reset the string cache.
    """


def cache_usage() -> int:
    """
    get the size of the string cache.

    Returns:
        Size of the string cache in bytes.
    """

Examples

The main function provided by Jiter is from_json(), which accepts a bytes object containing JSON and returns a Python dictionary, list or other value.

import jiter

json_data = b'{"name": "John", "age": 30}'
parsed_data = jiter.from_json(json_data)
print(parsed_data)  # Output: {'name': 'John', 'age': 30}

Handling Partial JSON

Incomplete JSON objects can be parsed using the partial_mode= parameter.

import jiter

partial_json = b'{"name": "John", "age": 30, "city": "New Yor'

# Raise error on incomplete JSON
try:
    jiter.from_json(partial_json, partial_mode=False)
except ValueError as e:
    print(f'Error: {e}')

# Parse incomplete JSON, discarding incomplete last field
result = jiter.from_json(partial_json, partial_mode=True)
print(result)  # Output: {'name': 'John', 'age': 30}

# Parse incomplete JSON, including incomplete last field
result = jiter.from_json(partial_json, partial_mode='trailing-strings')
print(result)  # Output: {'name': 'John', 'age': 30, 'city': 'New Yor'}

Catching Duplicate Keys

The catch_duplicate_keys=True option can be used to raise a ValueError if an object contains duplicate keys.

import jiter

json_with_dupes = b'{"foo": 1, "foo": 2}'

# Default behavior (last value wins)
result = jiter.from_json(json_with_dupes)
print(result)  # Output: {'foo': 2}

# Catch duplicate keys
try:
    jiter.from_json(json_with_dupes, catch_duplicate_keys=True)
except ValueError as e:
    print(f'Error: {e}')

Metadata

Release files for jiter-android 0.16.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jiter-android 0.16.0
File Size Uploaded
jiter_android-0.16.0.tar.gz 176.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jiter-android 0.16.0
File Interpreter ABI Platform
jiter_android-0.16.0-cp313-cp313-android_31_arm64_v8a.whl CPython 3.13 CPython 3.13 Android API level 31+ ARM64 v8a Details

Total release size: 545.6 kB

Release files / jiter_android-0.16.0.tar.gz

Download URL jiter_android-0.16.0.tar.gz
Size 176.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2270b37a85ced32030aa36d6b227108d07e5d3680c00a3c0bc4361ed8a1292fa
BLAKE2b-256 checksum
How to use checksums
c86e0abae80032de2ba923881e4060a32d2b0adf139130b03440676c85a3dc14
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.13

Release files / jiter_android-0.16.0-cp313-cp313-android_31_arm64_v8a.whl

Download URL jiter_android-0.16.0-cp313-cp313-android_31_arm64_v8a.whl
Size 369.6 kB
Tags Android API level 31+ ARM64 v8a CPython 3.13
SHA-256 checksum
How to use checksums
bed9f707ccbf474082d7fce355804cbc17d426a1ab860a6e0b1d0a2a21bb1a47
BLAKE2b-256 checksum
How to use checksums
283fcce9e154b527ca61b6ec83d8405ade891ca45756c83169150c22019589b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.13

Release history Release notifications | RSS feed

This release

0.16.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page