- Python 3.5+
- Minimal effort to use!
- No magic, just you, Python and jsons!
- Human readible JSON without pollution!
- Easily customizable and extendable!
- Type hints for the win!
π this lib? Leave a β and tell your colleagues!
Example of a model to serialize:
>>> @dataclass
... class Person:
... name: str
... birthday: datetime
...
>>> p = Person('Guido van Rossum', birthday_guido)Example of using jsons to serialize:
>>> out = jsons.dump(p)
>>> out
{'birthday': '1956-01-31T12:00:00Z', 'name': 'Guido van Rossum'}Example of using jsons to deserialize:
>>> p2 = jsons.load(out, Person)
>>> p2
Person(name='Guido van Rossum', birthday=datetime.datetime(1956, 1, 31, 12, 0, tzinfo=datetime.timezone.utc))pip install jsons
import jsons
some_instance = jsons.load(some_dict, SomeClass) # Deserialization
some_dict = jsons.dump(some_instance) # SerializationIn some cases, you have instances that contain other instances that need (de)serialization, for instance with lists or dicts. You can use the
typing classes for this as is demonstrated below.
from typing import List, Tuple
import jsons
# For more complex deserialization with generic types, use the typing module
list_of_tuples = jsons.load(some_dict, List[Tuple[AClass, AnotherClass]])(For more examples, see the FAQ)
- Feature: Added
warn_on_failparameter todefault_list_deserializerthat allows to continue deserialization upon errors. - Feature: Added
transformthat can transform an object to an object of another type. - Feature: Added serializer and deserializer for
pathlib.Path(thanks to alexmirrington). - Change: When loading a list fails, the error message now points to the failing index.
- Bugfix: Fixed bug when dumping an object with an innerclass.
- Bugfix: Fixed bug with postponed typehints (PEP-563).
- Bugfix: Loading an invalid value targeting an optional did not raise.
- Bugfix: Loading a dict did not properly pass key_transformers.
- Bugfix: Loading a namedtuple did not properly use key_transformers.
- Bugfix: Utilized
__annotations__in favor_field_typesbecause of deprecation as of 3.8.
- Feature: Added
__version__which can be imported fromjsons - Bugfix: Dumping a tuple with ellipsis failed in strict mode.
- Feature: Added a serializer for
Uniontypes. - Change: Exceptions are more clear upon deserialization failure (thanks to haluzpav).
- Change: You can no longer announce a class with a custom name.
- Bugfix: Fixed dumping optional attributes.
- Bugfix: Dataclasses inheriting from
JsonSerializablealways dumped their attributes as if in strict mode.
- Feature: Added
strictparameter todumpto indicate that dumping a certainclswill ignore any extra data. - Feature: When using
dump(obj, cls=x),xcan now be any class (previously, only a class with__slots__). - Feature: Support for dumping
Decimal(thanks to herdigiorgi). - Feature: Primitives are now cast if possible when dumping (e.g.
dump(5, str)). - Feature: Dumping iterables with generic types (e.g.
dump(obj, List[str])) will now dump with respect to that types (ifstrict) - Feature: The
default_dictserializer now optionally accepts types:Optional[Dict[str, type]]. - Change: Improved performance when dumping using
strict=True(up to 4 times faster!). - Bugfix:
set_validatorwith multiple types did not work.
- Feature: Added a serializer/deserializer for
time. - Feature: Added a serializer/deserializer for
timezone. - Feature: Added a serializer/deserializer for
timedelta. - Feature: Added a serializer/deserializer for
date. - Bugfix: Dumping verbose did not store the types of dicts (
Dict[K, V]). - Bugfix: Loading with
List(no generic type) failed. - Bugfix: Loading with
Dict(no generic type) failed. - Bugfix: Loading with
Tuple(no generic type) failed.
Special thanks to the following contributors of code, discussions or suggestions:
alexmirrington tirkarthi, marksomething, herdigiorgi, jochembroekhoff, robinklaassen, ahmetkucuk, casparjespersen, cypreess, gastlich, jmolinski, haluzpav, finetuned89,
