Skip to main content

JSON decoding for Python with type hinting (PEP 484)

Project description

typedjson

License Pypi CI

JSON decoding for Python with type hinting (PEP 484).

Requirements

  • Python >= 3.7
  • Use from __future__ import annotations (See PEP 563).
  • Use non-generic or parameterized @dataclasses.dataclass without modifying __init__ to decode JSON as class.

Features

  • Support decoding types as below:
    • primitive types like str, int, float, bool and None.
    • Union and Optional.
    • homogeneous and heterogeneous Tuple
    • variable-length Tuple.
    • non-generic and parameterized dataclasses.
  • Support API like json.load and json.loads.

Example

from __future__ import annotations
from typing import Optional

import typedjson
from dataclasses import dataclass


@dataclass(frozen=True)
class NameJson:
    first: str
    last: Optional[str]


@dataclass(frozen=True)
class CatJson:
    id: str
    age: int
    name: Optional[NameJson]


json = {
    'id': 'test-cat',
    'age': 13,
    'name': {
        'first': 'Jiji',
    },
}

print(typedjson.decode(CatJson, json))  # Output: CatJson(id='test-cat', age=13, name=NameJson(first='Jiji', last=None))

print(typedjson.decode(CatJson, {}))  # Output: <DecodingError path=('id',)>

Please refer to test codes for more detail.

TODO

  • Use __init__.__annotation__ to decode JSON as arbitrary class.

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

typedjson-0.3.0.tar.gz (3.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page