ramonhagenaars / jsons

🐍 A Python lib for (de)serializing Python objects to/from JSON
https://jsons.readthedocs.io
MIT License
289 stars 41 forks source link

deserialization with jsons to nested classes #188

Open t-raww187 opened 1 year ago

t-raww187 commented 1 year ago

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

bedapisl commented 1 year ago

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)