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 thisList[SomeClass]default[required] sets default field's value. Set toUndefinedby default.name[required] is the name of the field in original json.required[required] markedTrueif 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 likestr,int,float,boolandListof simple types. The function has one argument - field's value. It should returnTrueif the value is valid andFalseotherwise. Example lambda function:lambda x: x > 0
Additional rules
- If dataclass field value set to
Undefinedthen it will not be converted to json field - If dataclass field type is not
Optionalthen all dataclass fields withNonevalues 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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
jto-1.4.0-py3-none-any.whl
(14.4 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07331a06709def4af8ca9007b74e168ba72780d9c0a9a39f88ad9cf4b95c1533
|
|
| MD5 |
ec5b5c7ce0519c93dad4da4902d7b02b
|
|
| BLAKE2b-256 |
471f910ad5d4d1e7dc1ef2e9d50d48771ac6f4437a3530dc9032b19700e5fcc3
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4dfd734231a601f0fb323a59b79fc9e101f840199980549e35d09350ab36bf2d
|
|
| MD5 |
dd3eb8d9c4f12b7e1a8213d706ad934a
|
|
| BLAKE2b-256 |
af0c739e94e1d59707c5953db734719e631578bd7bc9cb99417599a6064e5601
|