{ "info": { "author": "Stanley Nian", "author_email": "stanley.nian@yandex.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.7" ], "description": "# Introduction\n\nThis library supports two-way data binding between JSON and Python class.\n\n# Turorial\n\nHere is a simple example to use jsonalize:\n\n```python\nfrom jsonalize import *\n\n\n# Define a class\nclass MyData(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.id = JSONString()\n self.name = JSONString()\n self.age = JSONInt()\n self.weight = JSONFloat()\n\n\n# Create an object of MyData\nmy = MyData()\nmy.id = \"20190101\"\nmy.name = \"Stanley\"\nmy.age = 28\nmy.weight = 60\n\n# jsonalize the object\njson_str = my.to_json()\nprint(json_str)\n\n# restore the object from json\nmy2 = JSONObject.from_json(MyData, json_str)\nprint(my2.to_json())\n\n```\n\nThis example should output the following message:\n```\n{\"age\": 28, \"id\": \"20190101\", \"weight\": 60.0, \"name\": \"Stanley\"}\n{\"age\": 28, \"id\": \"20190101\", \"weight\": 60.0, \"name\": \"Stanley\"}\n```\n\nAnother example shows how to prevent creating real objects for attributes when constructing a new JSONObject instance.\n\n```python\nclass MyData(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.id = JSONNoneInt\n self.name = JSONNoneString\n self.attr = JSONObject.NoneValue(Attr)\n\n\nclass Attr(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.value = JSONString()\n print(\"Attr object created\")\n\n\nmy = MyData()\nprint(my.id is None, my.name is None, my.attr is None)\n\nmy.id = 10\nmy.name = \"Stanley\"\nmy.attr = Attr()\nmy.attr.value = \"attr\"\nprint(my.to_json())\n\n# Outputs:\n# (True, True, True)\n# Attr object created\n# {\"attr\": {\"value\": \"attr\"}, \"name\": \"Stanley\", \"id\": 10}\n```\n\n\n### Key points from this tutorial\n- A serializable class should inherit the `JSONObject` class\n- Don't forget to invoke the `__init__` method in your class\n- The serializable class attributes should be set as `JSON**` types\n\n\n# List of supported JSON types\n\n- JSONInt\n- JSONLong (Only in Python 2)\n- JSONFloat\n- JSONComplex\n- JSONBool\n- JSONString\n- JSONList\n- JSONSet\n- JSONDict\n- JSONObject\n\nMost of the types can be initialized with an initial value, for example:\n```python\na_string = JSONString(\"hello jsonalize\")\n```\n\n### Remarks for JSONBool\n\nYou can't test the value of a JSONBool object with the `is` keyword, because `is` will compare the instance id of two objects, but an object of JSONBool is never an instance of `True` or `False`. \n\nYou can do the test as follows:\n```Python\na_bool = JSONBool(True)\nprint(a_bool is True, a_bool == True)\n# False, True\nprint(a_bool.true(), a_bool.true() is True, a_bool.equals(True))\n# True, True, True\n\n```\n\n\n# A more complex example\nYou can have an object of JSONObject in another JSONObject class:\n```python\nclass Monitor(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.size = JSONFloat()\n self.power = JSONFloat()\n self.color = JSONString()\n\n\nclass Computer(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.brand = JSONString()\n self.monitor = Monitor()\n\n\ncomputer = Computer()\ncomputer.brand = \"Lenovo\"\ncomputer.monitor.size = 23.0\ncomputer.monitor.power = 25.0\n\njson_str = computer.to_json()\nprint(json_str)\n#{\"brand\": \"Lenovo\", \"monitor\": {\"color\": \"\", \"power\": 25.0, \"size\": 23.0}}\n\ncomputer2 = JSONObject.from_json(Computer, json_str)\nprint(computer2.to_json())\n#{\"brand\": \"Lenovo\", \"monitor\": {\"color\": \"\", \"power\": 25.0, \"size\": 23.0}}\n```\n\n# A list of JSONObject objects?\nLook at the following example:\n```python\nclass Student(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.id = JSONString()\n self.name = JSONString()\n\n\nclass School(JSONObject):\n def __init__(self):\n JSONObject.__init__(self)\n self.address = JSONString()\n self.students = JSONList()\n\n\nstu1 = Student()\nstu1.id = \"20190202\"\nstu1.name = \"Stanley\"\n\nstu2 = Student()\nstu2.id = \"20190203\"\nstu2.name = \"Cyrus\"\n\nschool = School()\nschool.address = \"Central Street No.23\"\nschool.students.append(stu1)\nschool.students.append(stu2)\n\njson_str = school.to_json()\nprint(json_str)\n#{\"students\": [{\"id\": \"20190202\", \"name\": \"Stanley\"}, {\"id\": \"20190203\", \"name\": \"Cyrus\"}], \"address\": \"Central Street No.23\"}\n\nschool2 = JSONObject.from_json(School, json_str)\nprint(type(school2.students[0]), school2.students[0])\n#(, {u'id': u'20190202', u'name': u'Stanley'})\n\n```\n\nAs you can see here, the deserializing of the School object is incorrect. Because any type of object could be appended to school.students, so `jsonalize` don't know what to restore when deserializing.\n\nThis problem is currently not resolved, maybe I can add a type mapping structure in the future.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nianxy/jsonalize", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "jsonalize", "package_url": "https://pypi.org/project/jsonalize/", "platform": "any", "project_url": "https://pypi.org/project/jsonalize/", "project_urls": { "Homepage": "https://github.com/nianxy/jsonalize" }, "release_url": "https://pypi.org/project/jsonalize/0.2/", "requires_dist": null, "requires_python": ">=2.7", "summary": "A JSON data binding library for Python", "version": "0.2", "yanked": false, "yanked_reason": null }, "last_serial": 6062227, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "a1d588133f41d14b96a8d37ff84ed1de", "sha256": "7c98806598d291be3bdb9d8b6c7299ce6640b822674f1b88e4a1f3a2d81a0c16" }, "downloads": -1, "filename": "jsonalize-0.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "a1d588133f41d14b96a8d37ff84ed1de", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 6063, "upload_time": "2019-10-31T02:44:56", "upload_time_iso_8601": "2019-10-31T02:44:56.882786Z", "url": "https://files.pythonhosted.org/packages/ce/62/bf50a64e2f9c7f3918bacb2f1d92f46591eb98955455d2b0758738e50fbc/jsonalize-0.0.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d8174747cbd410d5cab6cc4433373417", "sha256": "d2b045153fa88cc312378722407abeb5403a6b23b9bfdce6370ac2e9545cffd3" }, "downloads": -1, "filename": "jsonalize-0.0.1.tar.gz", "has_sig": false, "md5_digest": "d8174747cbd410d5cab6cc4433373417", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4616, "upload_time": "2019-10-31T02:45:00", "upload_time_iso_8601": "2019-10-31T02:45:00.295110Z", "url": "https://files.pythonhosted.org/packages/1c/e7/9e3a064c42e48648ed229be1a5a9ba30235f53791378e71c4a381a52aa1f/jsonalize-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "d66d325ff0bd5a4af1e43acf0219f17c", "sha256": "115fc14f92efda6d64a1e83707d5c4a1aa7238d3d9e239c71de5605c4e642ee9" }, "downloads": -1, "filename": "jsonalize-0.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "d66d325ff0bd5a4af1e43acf0219f17c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 6179, "upload_time": "2019-10-31T04:11:15", "upload_time_iso_8601": "2019-10-31T04:11:15.062797Z", "url": "https://files.pythonhosted.org/packages/38/55/5c0ee47c5ff533bf4132f97c7f2da7c147480a1206ad725e968c910c47c6/jsonalize-0.0.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fdff9dd90bfd837d49138290d10f3c7d", "sha256": "83cd4e8cd00d46ad4c9d55469962bd83b38fa0fcc36c7710e3ea89b376a74435" }, "downloads": -1, "filename": "jsonalize-0.0.2.tar.gz", "has_sig": false, "md5_digest": "fdff9dd90bfd837d49138290d10f3c7d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4746, "upload_time": "2019-10-31T04:11:17", "upload_time_iso_8601": "2019-10-31T04:11:17.922517Z", "url": "https://files.pythonhosted.org/packages/b9/bb/f8d4c81f83e693b70f66d639207a751a138bf7e9d5d90c56378cc282d91e/jsonalize-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1": [ { "comment_text": "", "digests": { "md5": "1e7d42b214d05a1d7bca6c93cf1136d7", "sha256": "4cb01659031ac30d7ca31510afc870a009cef712ddce7466e9a830d1bd2cb970" }, "downloads": -1, "filename": "jsonalize-0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "1e7d42b214d05a1d7bca6c93cf1136d7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 5322, "upload_time": "2019-11-01T02:41:35", "upload_time_iso_8601": "2019-11-01T02:41:35.060679Z", "url": "https://files.pythonhosted.org/packages/8a/c1/a4896a2b822eb500f100080e496088800037a735b5e529c22a60c3957f1b/jsonalize-0.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b3910862b41f34381886bd25ab0ca890", "sha256": "5ffbc3553fb6fbabae22d04e07f3b646108d51255c16ee144074c0d1a802aab5" }, "downloads": -1, "filename": "jsonalize-0.1.tar.gz", "has_sig": false, "md5_digest": "b3910862b41f34381886bd25ab0ca890", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4713, "upload_time": "2019-11-01T02:41:36", "upload_time_iso_8601": "2019-11-01T02:41:36.909885Z", "url": "https://files.pythonhosted.org/packages/0d/d4/47b4f7fdf7019d21e225b4388bcb286a4f0684b8702c6e9b117afa9c71f1/jsonalize-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "a36805edcafb4cb1e340d318c5f73c60", "sha256": "13e926eb2583a27b3103032c471f1a32bb006ce6dfb991f9a534f689bb71d9bf" }, "downloads": -1, "filename": "jsonalize-0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "a36805edcafb4cb1e340d318c5f73c60", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 5896, "upload_time": "2019-11-01T08:13:45", "upload_time_iso_8601": "2019-11-01T08:13:45.089595Z", "url": "https://files.pythonhosted.org/packages/54/15/0af6071746ba36a2863eee0a325973ce092f992e8c0fd70dcd58b940a023/jsonalize-0.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "99e5cb43f71293538663bacd02d1c3d9", "sha256": "5c7d7df8294569ca3104ddb5f9185e6d176a4c6242741d65b0388ec5a31e6b4f" }, "downloads": -1, "filename": "jsonalize-0.2.tar.gz", "has_sig": false, "md5_digest": "99e5cb43f71293538663bacd02d1c3d9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5335, "upload_time": "2019-11-01T08:13:46", "upload_time_iso_8601": "2019-11-01T08:13:46.938892Z", "url": "https://files.pythonhosted.org/packages/cc/f3/5593107d9a75bd591ddf1562a3f9a0275ead1756b1fa771633c1e44b8b9b/jsonalize-0.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a36805edcafb4cb1e340d318c5f73c60", "sha256": "13e926eb2583a27b3103032c471f1a32bb006ce6dfb991f9a534f689bb71d9bf" }, "downloads": -1, "filename": "jsonalize-0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "a36805edcafb4cb1e340d318c5f73c60", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 5896, "upload_time": "2019-11-01T08:13:45", "upload_time_iso_8601": "2019-11-01T08:13:45.089595Z", "url": "https://files.pythonhosted.org/packages/54/15/0af6071746ba36a2863eee0a325973ce092f992e8c0fd70dcd58b940a023/jsonalize-0.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "99e5cb43f71293538663bacd02d1c3d9", "sha256": "5c7d7df8294569ca3104ddb5f9185e6d176a4c6242741d65b0388ec5a31e6b4f" }, "downloads": -1, "filename": "jsonalize-0.2.tar.gz", "has_sig": false, "md5_digest": "99e5cb43f71293538663bacd02d1c3d9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5335, "upload_time": "2019-11-01T08:13:46", "upload_time_iso_8601": "2019-11-01T08:13:46.938892Z", "url": "https://files.pythonhosted.org/packages/cc/f3/5593107d9a75bd591ddf1562a3f9a0275ead1756b1fa771633c1e44b8b9b/jsonalize-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }