/packson

A python library for JSON data binding

Primary LanguagePythonMIT LicenseMIT

Packson

PyPI version

Easily bind json and dictionaries to python class instances

Justification

Binding json and dictionaries to python class instances allows you to statically define what your data should look like and provides a single interface for checking that all information in your data is typed and initialized correctly.

Installation

pip install packson

Examples

import json
from packson.datatypes import packson_object, PacksonField

@packson_object
class ASimplePacksonObject(object):
    field1 = PacksonField(type=int)

@packson_object
class AComplexPacksonObject(object):
    field1 = PacksonField(type=int)
    field2 = PacksonField(type=str)
    field3 = PacksonField(type=ASimplePacksonObject)

@packson_object
class AnIterableObject(object):
    iterable_field = PacksonField(type=list, boxed_type=ASimplePacksonObject)

# bind json data to AComplexPacksonObject 
obj = AComplexPacksonObject.from_json(
    json.dumps(
        {
            'field1': 3,
            'field2': 'hello',
            'field3': {
                'field1': 4
            }
        }
    )
)
print(obj.field1)        # prints 3
print(obj.field2)        # prints 'hello'
print(obj.field3.field1) # prints 4

# bind dictionary to AnIterableObject 
obj = AnIterableObject.from_dict(
    {
        'iterable_field': [
            {
                'field1': 1
            },
            {
                'field1': 2
            },
            {
                'field1': 3
            }
        ]   
    }
)
print([i.field1 for i in obj.iterable_field]) # prints [1, 2, 3]

# dump json data from AnIterableObject instance
print(obj.to_json()) 

# dump dictionary data from AnIterableObject instance
print(obj.to_dict())