more info in json_test_cases
import selfusepy
obj: One = selfusepy.parse_json(jsonStr, One())
Because Python is not a strongly-typed language, so you must
assign a value when you define a variable in class,
otherwise the parser can not get the right type of each variable,
just like examples below
Python Class
from selfusepy.jsonparse import BaseJsonObject
class One(BaseJsonObject):
def __init__(self):
self.x: str = '' # have to be init
self.two: One.Two = One.Two() # have to be init
class Two(BaseJsonObject):
def __init__(self):
self.y: str = ''
self.three: One.Two.Three = One.Two.Three()
class Three(BaseJsonObject):
def __init__(self):
self.z: str = ''
Json str
{
"x": "x",
"two": {
"y": "y",
"three": {
"z": "z"
}
}
}
Python Class
from selfusepy.jsonparse import BaseJsonObject
from typing import List
class One1(BaseJsonObject):
def __init__(self):
self.x: str = ''
self.two: List[One1.Two] = [One1.Two()]
class Two(BaseJsonObject):
def __init__(self):
self.y: str = ''
Json str
{
"x": "x",
"two": [
{
"y": "y1"
},
{
"y": "y2"
}
]
}
from selfusepy.jsonparse import DeserializeConfig, BaseJsonObject
from selfusepy.utils import override_str
@override_str
@DeserializeConfig({'x--': 'x'})
class One2(BaseJsonObject):
def __init__(self):
self.x: str = ''
self.two: One2.Two = One2.Two()
@override_str
@DeserializeConfig({'y--': 'y'})
class Two(BaseJsonObject):
def __init__(self):
self.y: str = ''
self.three: One2.Two.Three = One2.Two.Three()
@override_str
@DeserializeConfig({'z--': 'z'})
class Three(BaseJsonObject):
def __init__(self):
self.z: str = ''
Json str
{
"x--": "x",
"two": {
"y--": "y",
"three": {
"z--": "z"
}
}
}
def handle(x):
return datetime.fromisoformat(x)
@DeserializeConfig({"date": JsonField(func = handle)})
class Obj(BaseJsonObject):
def __init__(self):
self.date: datetime = datetime.now()