Skip to main content

Convert json object to dataclass and vice versa

Project description

JTO Converter

Description

Convert json object to dataclass and vice versa. This package also provides tool for converting json object to dataclass template.

Requirements

Required structure of dataclass field

field_name: Optional[FieldType] = field(default=Undefined, metadata={'name': 'json_field_name', 'required': False, 'validate': validate_function})
  • field_name [required] can be any variable name.
  • Optional [optional] indicates that the field is nullable.
  • FieldType [required] should be strongly typed.
    For example in case of field containing the list it should look like this List[SomeClass]
  • default [required] sets default field's value. Set to Undefined by default.
  • name [required] is the name of the field in original json.
  • required [required] marked True if the field is required in the provided json.
  • validate [optional] is the function that validates the field's value. Validate function supports fields with simple types like str, int, float, bool and List of simple types. The function has one argument - field's value. It should return True if the value is valid and False otherwise. Example lambda function: lambda x: x > 0

Additional rules

  • If dataclass field value set to Undefined then it will not be converted to json field
  • If dataclass field type is not Optional then all dataclass fields with None values will not be converted to json fields

Examples

Convert json object to class objects

from dataclasses import dataclass, field
from typing import List, Optional

from jto import JTOConverter
from jto.undefined_field import Undefined

data = {
    "status": 200,
    "data": {
        "first": "qwer",
        "last": "qwer",
        "test": [
            {"f1": "1"},
            {"f1": "2"}
        ]
    }
}

@dataclass
class Test:
    f1: Optional[str] = field(default=Undefined, metadata={'name': 'f1', 'required': False})

@dataclass
class Data:
    first: Optional[str] = field(default=Undefined, metadata={'name': 'first', 'required': False, 'validate': lambda x: x == 'qwer'})
    last: Optional[str] = field(default=Undefined, metadata={'name': 'last', 'required': False})
    test: Optional[List[Test]] = field(default=Undefined, metadata={'name': 'test', 'required': False})

@dataclass
class Response:
    status: Optional[int] = field(default=Undefined, metadata={'name': 'status', 'required': False})
    data: Optional[Data] = field(default=Undefined, metadata={'name': 'data', 'required': False})


dataclass_object = JTOConverter.from_json(Response, data)
print(dataclass_object)

dataclass_object.status = None
json_object = JTOConverter.to_json(dataclass_object)
print(json_object)

Get class templates from json object

from jto.dataclass_generator import DataclassGenerator

data = {
    "status": 200,
    "data": {
        "first": "foo",
        "last": "bar",
        "struct": [
            {"f1": "1"},
            {"f1": "2"}
        ]
    }
}

classes = DataclassGenerator()
classes_str = classes.build_classes_string('Response', data)
print(classes_str)

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

jto-1.4.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

jto-1.4.0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file jto-1.4.0.tar.gz.

File metadata

  • Download URL: jto-1.4.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for jto-1.4.0.tar.gz
Algorithm Hash digest
SHA256 07331a06709def4af8ca9007b74e168ba72780d9c0a9a39f88ad9cf4b95c1533
MD5 ec5b5c7ce0519c93dad4da4902d7b02b
BLAKE2b-256 471f910ad5d4d1e7dc1ef2e9d50d48771ac6f4437a3530dc9032b19700e5fcc3

See more details on using hashes here.

File details

Details for the file jto-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: jto-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for jto-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4dfd734231a601f0fb323a59b79fc9e101f840199980549e35d09350ab36bf2d
MD5 dd3eb8d9c4f12b7e1a8213d706ad934a
BLAKE2b-256 af0c739e94e1d59707c5953db734719e631578bd7bc9cb99417599a6064e5601

See more details on using hashes here.

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