Supported types

perde supports the following types.

  • Primitive types
    • int
    • str
    • float
    • bool
    • bytes
    • bytearray
  • Generic types
    • dict / typing.Dict
    • list / typing.List
    • set / typing.Set
    • frozenset / typing.FrozenSet
    • tuple / typing.Tuple
    • typing.Optional
    • typing.Union
    • typing.Any
  • Enum types
    • Enum
    • IntEnum
    • Flag
    • IntFlag
  • More built-in types
    • datetime.datetime
    • datetime.date
    • datetime.time
    • decimal.Decimal
    • uuid.UUID
  • dataclass

Deserialization

The supported types can be used to specify as which type the input is parsed. They can be directly set to the first argument of loads_as methods, or can be the member type of dataclass.

Directly set to loads_as

To parse a JSON array as list,

>>> perde.json.loads_as(list, '[97, 98, 99]')
[97, 98, 99]

To parse a JSON array as bytes,

>>> perde.json.loads_as(bytes, '[97, 98, 99]')
b'abc'

To parse a JSON array as a set,

>>> perde.json.loads_as(typing.Set[int], '[97, 98, 99]')
{97, 98, 99}

As a member of dataclass

>>> @dataclass
... class A:
...     a: str
...     b: bytes
...     c: typing.Dict[str, int]

>>> perde.json.loads_as(A, '{"a": "x", "b": [97, 98, 99], "c": {"p": 4, "q": 5}}')
A(a='x', b=b'abc', c={'p': 4, 'q': 5})

Deserializing incompatible types raises an exception from the format module.

>>> @dataclass
... class A:
...     a: int
...     b: str

>>> perde.json.loads_as(A, '{"a": 3, "b": 4}')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
json.JsonError: invalid type: integer `4`, expected a string at line 1 column 15

Serialization

The instances of the supported types can be serialized by dumps methods.

To serialize list to a JSON array,

>>> perde.json.dumps([97, 98, 99])
'[97,98,99]'

To serialize bytes to a JSON array,

>>> perde.json.dumps(b'abc')
'[97,98,99]'

To serialize set to a JSON array,

>> perde.json.dumps({97, 98, 99})
'[97,98,99]'