Serialize Pydantic models and non-JSONable types into a JSONable variable.
Project description
JsonAblr
JsonAblr is a Python library that allows you to encode variables into a format that represents a JSON object. It provides a simple and intuitive way to convert variables into a JSON-like structure, making it easier to store and transmit data.
This was heavily inspired by FastAPI's jsonable_encoder
.
- JsonAblr now requires Pydantic 2.0 or above. If you are using Pydantic 1.x, please use JsonAblr 1.1.1.
Features
- Encode variables into a JSON-like format
- Supports various data types including strings, numbers, lists, dictionaries, dates, Pydantic models, dataclasses and more
- Easy to use
- Customizable for your own types
Installation
You can install Jsonablr using pip:
pip install jsonablr
Usage
encode
helper function:
from jsonablr import encode
from datetime import datetime, timezone
my_date = datetime.now(tz=timezone.utc)
print(encode(my_date))
Output:
2023-06-26T12:30:00.000Z
JsonAblr
class:
from typing import Set
from datetime import datetime
from jsonablr import JsonAblr
from pydantic import BaseModel
class DynamoDbItem(BaseModel):
partition_key: str
sort_key: str
games: Set[str]
when: datetime
encoder = JsonAblr(
encoders={
datetime: lambda x: x.isoformat(sep=' ', timespec='seconds')
},
preserve_set=True
)
item = DynamoDbItem(
partition_key='foo',
sort_key='bar',
games=['minecraft', 'terraria'],
when=datetime.now()
)
print(encoder.encode(item))
This example demonstrates using a Pydantic model to be used as AWS DynamoDB item and not to be used as JSON. The games
attribute is returned as a set (when using the preserve_set=True
option) to support the DynamoDB SET type.
Serialising a set with json.dumps
will cause an error.
Output:
{
'partition_key': 'foo',
'sort_key': 'bar',
'games': {'minecraft', 'terraria'},
'when': '2023-06-26 12:30:00'
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.