I think I arrive a little bit late to the party, but I think this answer may come handy for future users having the same question.
To convert the dataclass
to json you can use the combination that you are already using using (asdict
plus json.dump
).
from pydantic.dataclasses import dataclass
@dataclass
class User:
id: int
name: str
user = User(id=123, name="James")
d = asdict(user) # {'id': 123, 'name': 'James'
user_json = json.dumps(d)
print(user_json) # '{"id": 123, "name": "James"}'
# Or directly with pydantic_encoder
json.dumps(user, default=pydantic_encoder)
Then from the raw json
you can use a BaseModel
and the parse_raw
method.
If you want to deserialize json into pydantic
instances, I recommend you using the parse_raw
method:
user = User.__pydantic_model__.parse_raw('{"id": 123, "name": "James"}')
print(user)
# id=123 name="James"
Otherwise, if you want to keep the dataclass:
json_raw = '{"id": 123, "name": "James"}'
user_dict = json.loads(json_raw)
user = User(**user_dict)