Package: jsonmarshal
JSON MarshalMarshal JSON to and from python dataclassesJson FieldTo support unmarshalling from jsonjsonmarshalextends the existing
dataclassfieldwith the following options:"json" option specifies the string key to be used when
marshalling/unmarshalling to/from json. When the "json" option
is not specified, the key on the dataclass will be used."omitempty" option specifies that the field should be omitted
from marshalling if the field is typed as anOptional[...]value,
and is set toNone.MarshalMarshal python dataclasses into json.marshal(data: Any, datetime_fmt: Optional[str] = None, date_fmt: Optional[str] = None) -> AnyGiven a dataclassX, marshal it into a json serializable format.The "datetime_fmt" option allows the user to specify the format to
use when marshalling a datetime object into a string.The "date_fmt" option allows the user to specify the format to use
when marshalling a date object into a string.Both "datetime_fmt" and "date_fmt" options use the strftime/strptime behaviour:https://docs.python.org/3/library/datetime.html#strftime-strptime-behaviorUnmarshalUnmarshal a response containing loaded json (json.load(s)) into a specified dataclass schema.unmarshal(response: Any, schema: T, datetime_fmt: Optional[str] = None, date_fmt: Optional[str] = None) -> TThe "datetime_fmt" option allows the user to specify the format to
use when unmarshalling a string into a datetime object.The "date_fmt" option allows the user to specify the format to use
when unmarshalling a string into a date object.Both "datetime_fmt" and "date_fmt" options use the strftime/strptime behaviour:https://docs.python.org/3/library/datetime.html#strftime-strptime-behaviorExamples:A plain dataclass:@dataclass
class Item:
    first_key: str
    second_key: int

item = Item(first_key: "hello", second_key: 100)

marshal(item)
{"first_key": "hello", "second_key": 100}A dataclass defining the json option:@dataclass
class Item:
    first_key: str = json_field(json="firstKey")
    second_key: int = json_field(json="secondKey")

item = Item(first_key: "hello", second_key: 100)

marshal(item)
{"firstKey": "hello", "secondKey": 100}A dataclass defining the omitempty option:@dataclass
class Item:
    first_key: Optional[str] = json_field(omitempty=True)
    second_key: Optional[int] = json_field(omitempty=True)

item = Item(first_key: None, second_key: 100)

marshal(item)
{"second_key": 100}A dataclass supporting Enums:class Colour(Enum):
    RED = "RED"
    GREEN = "GREEN"

@dataclass
class Item:
    first_key: Colour
    second_key: Colour

item = Item(first_key: Colour.RED", second_key: Colour.GREEN)

marshal(item)
{"first_key": "RED", "second_key": "GREEN"}A dataclass with dates/datetimes:@dataclass
class Item:
    first_key: datetime
    second_key: date

item = Item(first_key: datetime(2020, 6, 11, 14, 32), second_key: date(2020, 5, 14))

marshal(item)
{"first_key": "2020-06-11T14:32:00", "second_key": "2020-05-14"}A dataclass with dates/datetime supporting custom formats:@dataclass
class Item:
    first_key: datetime
    second_key: date

item = Item(first_key: datetime(2020, 6, 11, 14, 32), second_key: date(2020, 5, 14))

marshal(item, datetime_fmt="%d %b %Y %H:%M", date_fmt="%d %b %Y")
{"first_key": "11 Jun 2020 14:32", "second_key": "14 Jun 2020"}UUIDs get automatically marshalled to UUID type@dataclass
class Item:
    first_key: UUID

item = Item(first_key: UUID("8b302ccb-fd97-4ce0-823a-eddd9ec1247d"))

marshal(item)
{"first_key": "8b302ccb-fd97-4ce0-823a-eddd9ec1247d"}