HGI JSON
A Python 3 library for easily JSON encoding/decoding complex class-based Python models, using an arbitrarily complex (but easy to write!) mapping schema.
Features
Ability to create serializers and deserializers for complex class-based models using a mapping schema defined in Python.
Works seamlessly with Python’s in-built json.dumps and json.loads serialization methods - does not require the use of exotic convert_to_json/convert_from_json methods.
Python models are not be coupled to the serialization process - models do not have to inherit from a particular superclass or implement an interface with a to_json (or similar) method.
JSON representations produced are not coupled to the Python model - an arbitrary mapping between the JSON and the model can be defined.
Simple to define serialization of subclasses, based on how superclasses are serialized.
Pure Python 3 - no DSL, XML or similar required to describe mappings, not using outdated Python 2.
Overview
Basic Steps
Define schema for mapping an object to and/or from JSON representation using a list of JsonPropertyMapping definitions.
Use MappingJSONEncoderClassBuilder with the mappings to build a subclass of JSONEncode for serializing instances of a specific type. Similar with decode.
Use created encoder class with Python’s in-built json.dumps via the cls parameter. Similar with decoder.
Defining Encoders/Decoders
Encoders and decoders are generated based on a defined JSON <-> Model mapping. A mapping can be written that allows complex classes, such as that below, to be mapped to and from any JSON representation:
class CustomClass(SupportFor, MultipleInheritance):
self __init__(self, support_for_constructor_parameters):
self.support_for_all_types_of_properties = ""
self.including_sets = set()
self.and_lists = list()
self.and_dictionaries = dict()
self.and_complex_properties = ComplexClass()
self.and_nested_objects_of_the_same_type = CustomClass()
self.and_properties_not_in_json_if_none = None
self support_for_setters(self, value):
"""..."""
self support_for_getters(self):
"""..."""
CustomClassJSONEncoder = MappingJSONEncoderClassBuilder(...).build() # type: JSONEncoder
CustomClassJSONDecoder = MappingJSONDecoderClassBuilder(...).build() # type: JSONDecoder
custom_class_as_json = json.dumps(custom_class, cls=CustomClassJSONEncoder) # type: str
custom_class = json.loads("<custom_class_as_json>", cls=CustomClassJSONDecoder) # type: CustomClass
Documentation
For more details, including information on how to setup and use the library, please view the documentation on ReadTheDocs or read it from /docs.
Metadata
Release files for hgijson 3.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hgijson-3.1.0.tar.gz | 22.0 kB | Details |
Release files / hgijson-3.1.0.tar.gz
| Download URL | hgijson-3.1.0.tar.gz |
|---|---|
| Size | 22.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1ac523eb5d2dc55d28000a4a493f279a45e39ba5c70fc91a738f2c7d8f220d76
|
|
BLAKE2b-256 checksum How to use checksums |
2a706ad4309aedf83a258fa1b7d705bc8c824d47835f088e56f798a783b7c44d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |