Skip to content

Latest commit

 

History

History
91 lines (63 loc) · 1.91 KB

ReadMe.md

File metadata and controls

91 lines (63 loc) · 1.91 KB

Install

pip install dataclasses_ujson

JSON with DataClasses

The library provides a simple API for decoding JSON to dataclasses. You can use nested dataclasses. The library uses ujson for better performance. There is support for validate simply type: str, int, float, bool, Optional Minimal python version: python 3.7

Examples

from typing import List, Dict
from dataclasses import dataclass
from dataclasses_ujson.dataclasses_ujson import UJsonMixin

json_string = """
{"a": 1, "b": [{"x": 1}, {"x": 2}], "c": {"x": 1}}
"""

@dataclass(frozen=True)
class JsonDict(UJsonMixin):
    x: Dict[str, int]

@dataclass(frozen=True)
class JsonClass(UJsonMixin):
    a: int
    b: List[JsonDict]
    c: Dict[str, int]

data = JsonClass.loads(json_string)

print(data.c["x"])
print(list(data.b)[0].x)

new_dict = data.to_serializable()
print(new_dict)

All lists will be returned as generators

from typing import List, Dict
from dataclasses import dataclass
from dataclasses_ujson.dataclasses_ujson import UJsonMixin

json_string = """
[{"x": 1}, {"x": 2}]
"""

@dataclass(frozen=True)
class JsonDict(UJsonMixin):
    x: Dict[str, int]

data = JsonDict.loads(json_string, many=True)

print(data) # generator object UJsonMixin
print(list(data)) # list of JsonDict

Performance:

Libraries were compared:

The script is placed in repository (bench_marks.py):

Name of library Results
json 0.62s
ujson 0.53s
dataclasses-ujson 1.24s (python3.10)
dataclasses-json 21.6s

if generator will be returned (using flag many=true)

Name of library Results
json 0.62s
ujson 0.54s
dataclasses-ujson 0.59s
dataclasses-json -