json_serializable

enables python class to be serializable/deserializable


Keywords
json
License
Other
Install
pip install json_serializable==1.0.1

Documentation

Json Serializable

Json Serializable enables python class to be serializable/deserializable.

json = your_class_obj.to_json()  # serialize
obj = YourClass().load_json(json)  # deserialize

Install

pip install json_serializable

Quick Start

Sample code(see the demo.py file in test folder):

from enum import Enum
from datetime import datetime
from json_serializable import JsonSerializable


class Category(Enum):
    technology = 1
    life = 2


class BlogPost(JsonSerializable):

    def __init__(self, title="", category=Category.technology, date=None, content=""):
        super().__init__()
        self.title = title
        self.category = category
        self.date = date
        self.content = content

    def __str__(self):
        return "{0}@{1} [{2}]: {3}".format(self.title, self.date, self.category, self.content)

if __name__ == "__main__":
    # serialize
    post = BlogPost("About Python",
                    Category.technology,
                    datetime.today(),
                    "I learned about Python.")
    post_json = post.to_json()

    print("original:{0}".format(post))
    print("serialized:{0}".format(post_json))


    # deserialize
    another_post_json = '{"title": "About Todays Lunch", "category": 2, "date": "2014/1/1 12:00:00", "content":"I ate Sushi." }'
    another_post = BlogPost().load_json(another_post_json)

    print("deserialized:{0}".format(another_post))

The result is below:

original:About Python@2014-12-25 14:48:35.960557 [Category.technology]: I learned about Python.
serialized:{"__jsonserializable_type__": "__main__.BlogPost", "title": "About Python", "category": 1, "content": "I learned about Python.", "date": "2014-12-25 14:48:35"}

deserialized:About Todays Lunch@2014/1/1 12:00:00 [Category.life]: I ate Sushi.

datetime and Enum also supported.

Customize

You can customize serialize/deserialize rule like below.:

self.set_serialize_rule(datetime, lambda v: v.strftime("%Y/%m/%d %H:%M:%S"))
self.set_deserialize_rule(datetime, lambda t, v: datetime.strptime(v, "%Y/%m/%d %H:%M:%S"))