Skip to main content

Typed JSON dataclasses

Project description

JSON Dataclasses

GitHub PyPI GitHub Workflow Status GitHub Workflow Status

Typed JSON dataclasses for Python 3.9+

Check out the docs

Installation

pip install jsondataclasses

Usage

from datetime import date
from typing import Literal, Optional

from jsondataclasses import jsondataclass, jsonfield


def parse_date(date_string: str) -> date:
    return date.fromisoformat(date_string.replace(".", "-"))


@jsondataclass
class Car:
    make: Literal["Ford", "Renault", "Volkswagen"] = jsonfield("carMake")
    model: str = jsonfield("model")
    manufactured_at: date = jsonfield("dateOfManufacture", parse_date)
    num_of_wheels: Optional[int] = jsonfield("numberOfWheels", default_value=4)


car = Car({
    "carMake": "Ford",
    "model": "Focus",
    "dateOfManufacture": "2018.03.14"
})
print(car)  # Car(make='Ford', model='Focus', manufactured_at=datetime.date(2018, 3, 14), num_of_wheels=4)

Class field types can be any primitive type (eg. str, int, datetime), a variadic generic (eg. list[str], Optional[int], Literal["hello", "world"]), or even another jsondataclass. The default_value argument of jsonfield will be used if the specified key is not found in the dictionary and the type of the class field is not Optional[...]. In this case, the value of default_value will be passed to the supplied parser function.

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

jsondataclasses-0.0.6.tar.gz (4.0 kB view hashes)

Uploaded Source

Built Distribution

jsondataclasses-0.0.6-py3-none-any.whl (4.0 kB view hashes)

Uploaded Python 3

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