jsons icon indicating copy to clipboard operation
jsons copied to clipboard

deserialization with jsons to nested classes

Open t-raww187 opened this issue 1 year ago • 1 comments

Hello, It is not very clear to me how to deserialize a json for nested classes. Let's say we have the following classes

import jsons
from typing import List, Tuple, Dict
class Person:
    def __init__(self):
        self.name = ''
        self.age = ''
        self.address= Address()
        
class Address:
    def __init__(self):
        self.street= ''
        self.cp = ''

p = Person()
d = Address()

j = {'name': 'John', 'age': '30', 'address': {'street': '41 Ave', 'cp': '08019'}}

obj = jsons.load(j, Person)

print(obj.address)
>>>{'street': '41 Ave', 'cp': '08019'}

Does not return an Address object. Any way to solve this silly problem? thanks in advance

t-raww187 avatar May 18 '23 15:05 t-raww187

Hello, I think you need to have all parameters in the constructor. And these parameters need type hints. After these changes it works for me:

import jsons
from typing import List, Tuple, Dict


class Address:
    def __init__(self, street: str='', cp: str=''):
        self.street = street
        self.cp = cp


class Person:
    def __init__(self, name: str='', age: int='', address: Address=Address()):
        self.name = name
        self.age = age
        self.address = address


p = Person()
d = Address()

j = {'name': 'John', 'age': '30', 'address': {'street': '41 Ave', 'cp': '08019'}}

obj = jsons.load(j, Person)

print(obj.address)

bedapisl avatar Sep 27 '23 13:09 bedapisl