Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wtsi-hgi/python-json
Python library for easily JSON encoding/decoding complex class-based Python models, using an arbitrarily complex (but easy to write!) mapping schema.
https://github.com/wtsi-hgi/python-json
json library python
Last synced: about 1 month ago
JSON representation
Python library for easily JSON encoding/decoding complex class-based Python models, using an arbitrarily complex (but easy to write!) mapping schema.
- Host: GitHub
- URL: https://github.com/wtsi-hgi/python-json
- Owner: wtsi-hgi
- License: mit
- Created: 2016-02-01T14:17:17.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-01-23T12:34:08.000Z (almost 7 years ago)
- Last Synced: 2024-05-20T00:35:14.763Z (7 months ago)
- Topics: json, library, python
- Language: Python
- Homepage:
- Size: 190 KB
- Stars: 4
- Watchers: 4
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-python-models - python-json - Python library for easily JSON encoding/decoding complex class-based Python models, using an arbitrarily complex (but easy to write!) mapping schema. (Model, Schema)
README
[![Build Status](https://travis-ci.org/wtsi-hgi/python-json.svg)](https://travis-ci.org/wtsi-hgi/python-json)
[![codecov.io](https://codecov.io/gh/wtsi-hgi/python-json/graph/badge.svg)](https://codecov.io/gh/wtsi-hgi/python-json/)
[![Documentation Status](https://readthedocs.org/projects/hgi-json/badge/?version=latest)](http://hgi-json.readthedocs.io/en/latest/?badge=latest)
# 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.
* [Well tested](https://codecov.io/gh/wtsi-hgi/python-json/).## Overview
### Basic Steps
1. Define schema for mapping an object to and/or from JSON representation using a list of `JsonPropertyMapping`
definitions.
2. Use `MappingJSONEncoderClassBuilder` with the mappings to build a subclass of `JSONEncode` for serializing instances
of a specific type. Similar with decode.
3. 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:
```python
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 = Noneself support_for_setters(self, value):
"""..."""self support_for_getters(self):
"""..."""
CustomClassJSONEncoder = MappingJSONEncoderClassBuilder(...).build() # type: JSONEncoder
CustomClassJSONDecoder = MappingJSONDecoderClassBuilder(...).build() # type: JSONDecodercustom_class_as_json = json.dumps(custom_class, cls=CustomClassJSONEncoder) # type: str
custom_class = json.loads("", cls=CustomClassJSONDecoder) # type: CustomClass
```## Documentation
For more details, including information on how to setup and use the library, please [view the documentation on
ReadTheDocs](http://hgi-json.readthedocs.io/en/latest/) or read it from `/docs`.