{ "info": { "author": "mrzhangboss", "author_email": "2529450174@qq.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Json2DB\n\n> Python3.6+\n\n\nJust need defined a json object, then you can save it in to a relational DB like MySQL PostgreSQL or other DB.\n\n## Reason To Write This FrameWork\n\nAlthough NoSQL Database like MongoDB is popular, we still need SQL DataBase for analyze data,\nso this module is helping us store json to database, and help us build them in db.\n\n\n## Feature\n\n- support mostly common database (`MySQL`, `PostgreSQL`, `MSSQL`, `SQLite`),\n\njust set `database` like\n\n JFactory(database='mysql')\n\nSee more in [types](json2db/types.py)\n\nYou can set `str2col` control Database Column Type like `Text` or `VARCHAR` and other.You can see more\nexample in [tests/test_comom_factory.py](tests/test_comom_factory.py)\n\n\n\n\n\n- Support Different Style of database column\n\nIf you want your db column like `some_thing` style\n\n from json2db import JFactory, ColumnFormat\n JFactory(column_fmt=ColumnFormat.UNDERLINE)\n\nIf you want your db column to be `someThing` style, use `ColumnFormat.CAMEL`\n\nDefault we do nothing as the json format.\n\n\n- Support Add a TimeStamp for your first table\n\n- Support set table args for your each table init\n\n- Support add comment to your field\n\nJust Use `{\"field\": {\":my comment\": \"real value\"}}`, it can take the `my comment` to this `field`\n\n- Support Control the `max_depth` of your json table\n\nPS: min is `0` which meaning it only one table for all json\n\n- Support Restore your data to anther table\n\nif your data like `d = {\"father_id\": 1, \"father_name\": \"father\", \"brother\": {\"brother_name\": \"jack\"}, 'sons': [{\"son_name\": \"aa\"}}`, You can save it to a \nnew table like `father - son ` framework like `{\"father_id\": 1, \"brother_name\": \"jack\", 'sons': [{\"son_name\": \"aa\", \"father_name\": \"father\"}]}`\n\nPS: you move `brother` field to `father` table, and move `father` field to `son` table,you can use \n\n model.store(data=new_d, is_press=True)\n\nSee more sample please see [tests](tests)\n\n\n## A Simple Example \n\n> For create_table ,store data and search data \n\n\n from json2db import JFactory, ColumnFormat\n d = {\"aa\": 1, \"bb\": 2, \"brother\": {\"name\": \"jack\", \"namess\": [{\"other\": \"jack\"}]}, 'sons': [{\"son_name\": \"aa\"}]}\n\n factory = JFactory()\n model = factory.from_json(data=d, root_name=\"data\")\n model.create_tables_in_db()\n model.store(data=d)\n model.search(search_args=[(\"aa\", 1)], limit=2)\n\n You can save your data to any `sqlalchemy` support database like MySQL, PostgreSQL,Oracle,SQLite(Default stored if you not set `db_url`) and so on.\n The `db_url` format please see more detail see [https://docs.sqlalchemy.org/en/latest/core/engines.html](https://docs.sqlalchemy.org/en/latest/core/engines.html)\n\n\n\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/mrzhangboss/json2db", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "json2db", "package_url": "https://pypi.org/project/json2db/", "platform": "", "project_url": "https://pypi.org/project/json2db/", "project_urls": { "Homepage": "https://github.com/mrzhangboss/json2db" }, "release_url": "https://pypi.org/project/json2db/3.2.3/", "requires_dist": [ "sqlalchemy", "attrs", "python-dateutil" ], "requires_python": ">=3.6.0", "summary": "convert json to relational db", "version": "3.2.3" }, "last_serial": 4647542, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "ccfd58ba36e61a3c2c594033ac733bf5", "sha256": "1af67af2ff0413b7672681c10391804bc6f2fce65e9f91a9d65b142e49a2e3f2" }, "downloads": -1, "filename": "json2db-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ccfd58ba36e61a3c2c594033ac733bf5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2066, "upload_time": "2018-11-17T06:16:07", "url": "https://files.pythonhosted.org/packages/b3/13/346339161f06825c1453094254cb8ca7ca2ca2d7e252033c7a30dc042b80/json2db-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c9a4d340f57cac01028e790625e7fd6", "sha256": "d1c3eadfbaaa43a040f79f0aa6d3808b6a840489631fb5fb9600f56bcd029928" }, "downloads": -1, "filename": "json2db-0.0.1-py3.6.egg", "has_sig": false, "md5_digest": "5c9a4d340f57cac01028e790625e7fd6", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 1046, "upload_time": "2018-11-14T15:52:40", "url": "https://files.pythonhosted.org/packages/bd/e5/16604c77cb762b0750f27071e5df38ac9b443ecd287ef7b4aea8838417f4/json2db-0.0.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "3b547cecd4878ab9072381ddd840c810", "sha256": "cc0f1c96fb51848572784daedc6d28858bc781a8f51ee626f511fbea7eabc35f" }, "downloads": -1, "filename": "json2db-0.0.1.tar.gz", "has_sig": false, "md5_digest": "3b547cecd4878ab9072381ddd840c810", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1609, "upload_time": "2018-11-17T06:16:08", "url": "https://files.pythonhosted.org/packages/0a/d8/b803a94fef65c8a223f069be02f22baa95bb6b5dc702d2080985d28e9590/json2db-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "05d02eeb65cc2c5d4a212c12cbae18ca", "sha256": "5a4e2fff07b2a39bc6172b32cd36386d9410ceee0eb7b44a12eacce2e538c24b" }, "downloads": -1, "filename": "json2db-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05d02eeb65cc2c5d4a212c12cbae18ca", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 2065, "upload_time": "2018-11-17T06:17:31", "url": "https://files.pythonhosted.org/packages/16/c4/cd363f7455f94de1d90564241cac4e6043f01a6e429183e88d17d0362ba9/json2db-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77c082894eb3d116c5160969543844e3", "sha256": "bf14c3a65247b322aa8458b62288eb90464702cd438039720431f9d51a3c432b" }, "downloads": -1, "filename": "json2db-0.0.2.tar.gz", "has_sig": false, "md5_digest": "77c082894eb3d116c5160969543844e3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 1601, "upload_time": "2018-11-17T06:17:33", "url": "https://files.pythonhosted.org/packages/b8/2d/316931c92f9f54154a5c6838e63174a27e41f2475103b4294ea63149c7e3/json2db-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "61cb87468ecacbf21e9b94d7b248cbc3", "sha256": "d17e7b22a1093ac329c1ff0b394e54b32b94d9036e9f70bb099428f875d8837f" }, "downloads": -1, "filename": "json2db-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "61cb87468ecacbf21e9b94d7b248cbc3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 2278, "upload_time": "2018-11-17T07:25:14", "url": "https://files.pythonhosted.org/packages/2e/f6/a193dc8a0b82813ec1bb212444a04b62c394231e8a94255fd6081a1895c9/json2db-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4e45b604c2ff3ad4f0060319e2ad861b", "sha256": "d6dcda8a558ddd28e1828ef285c5b61c2f4c71c42f76944b21970d56e175e6dd" }, "downloads": -1, "filename": "json2db-0.0.3.tar.gz", "has_sig": false, "md5_digest": "4e45b604c2ff3ad4f0060319e2ad861b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 1704, "upload_time": "2018-11-17T07:25:16", "url": "https://files.pythonhosted.org/packages/fe/61/2b67279a53e6df6c40ced4dff770a0982cbd43e5110183c0ce4eba948fbc/json2db-0.0.3.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "ef962e706c4c781c8bb51a5fe8ed3090", "sha256": "6a594e0770d7d62fb7a7147ebe9e0d6e4a8ed50238458dd6219d2ae1c380709f" }, "downloads": -1, "filename": "json2db-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ef962e706c4c781c8bb51a5fe8ed3090", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 9517, "upload_time": "2018-11-18T16:04:30", "url": "https://files.pythonhosted.org/packages/43/b8/27b779e704443081e7f59133bd01033ad23e3b0f67bf0571d2b11b8f53de/json2db-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a785374d58df71f86bc36bfdde48d4d", "sha256": "ef31ad775220213426f5a05400234bef170b2f0a446ccd52aaad6480b457d1ac" }, "downloads": -1, "filename": "json2db-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0a785374d58df71f86bc36bfdde48d4d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 8168, "upload_time": "2018-11-18T16:04:32", "url": "https://files.pythonhosted.org/packages/e3/bc/df43418b91e341bb02df7c7d672626df5811edb32490474203fad1a9907b/json2db-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d75d76074f27d28c1ce1269dbf996d0c", "sha256": "f566a1a251832a0f1a79ad46f746cd6fc16a9babcbd70658272dd9f30fb0dec0" }, "downloads": -1, "filename": "json2db-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d75d76074f27d28c1ce1269dbf996d0c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10800, "upload_time": "2018-11-19T00:49:54", "url": "https://files.pythonhosted.org/packages/c7/bb/9f834d98a8dce04773e7b0f0c24a506bd10a27922b680912d57e37ea66b1/json2db-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5da6a259e8f864a4c7f39205d4816d7", "sha256": "74adfe49ce3794a9656d5cc4a3ff6172f710a20cbd43ba14116e9eb249d9516f" }, "downloads": -1, "filename": "json2db-1.0.1.tar.gz", "has_sig": false, "md5_digest": "a5da6a259e8f864a4c7f39205d4816d7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9095, "upload_time": "2018-11-19T00:49:56", "url": "https://files.pythonhosted.org/packages/b5/00/a48f848b024bdec9899d8c2b62dce7f6c671d8f2d226bd1aa4765d2192d2/json2db-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "38704992556b0f33294c46b4a29af686", "sha256": "9006f092d002c431159e6389c66b8c0bcbcc1edf78bd5c4cc476abc153593b18" }, "downloads": -1, "filename": "json2db-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38704992556b0f33294c46b4a29af686", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 11668, "upload_time": "2018-11-19T13:14:08", "url": "https://files.pythonhosted.org/packages/f7/f0/12d4218773137ec5735e99b810fc729ab2c577fbeab68025eba437740dfc/json2db-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cd0914b759a0b6184925c620eedfc2e", "sha256": "9172380eaac3f62463bed40b7aa07039945457574419211679a87bed40fc6e4f" }, "downloads": -1, "filename": "json2db-2.0.0.tar.gz", "has_sig": false, "md5_digest": "0cd0914b759a0b6184925c620eedfc2e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 10684, "upload_time": "2018-11-19T13:14:10", "url": "https://files.pythonhosted.org/packages/b9/cf/e9829952a759333833706d919916423eb0f012264d43d194b802df87e64c/json2db-2.0.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "a21cee6012bf3c60cfaf923648d3b5a3", "sha256": "232956ccc1143170269bed172a625afea81d08f1031a2dc9a7a4fa98c87ca721" }, "downloads": -1, "filename": "json2db-3.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a21cee6012bf3c60cfaf923648d3b5a3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14087, "upload_time": "2018-11-20T13:58:39", "url": "https://files.pythonhosted.org/packages/2e/13/829baf4623209c1d4ff9b0a464e1fd83a71c28d11ad97f52920f6ad5d3aa/json2db-3.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa441ad7fa0a3c482a8536ae43fa633d", "sha256": "2a07545eb71a53c1be34d27c3260bc36cefe97a7d71822fefa7f583c2ca96b35" }, "downloads": -1, "filename": "json2db-3.0.0.tar.gz", "has_sig": false, "md5_digest": "aa441ad7fa0a3c482a8536ae43fa633d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13073, "upload_time": "2018-11-20T13:58:41", "url": "https://files.pythonhosted.org/packages/1d/9e/ba3abc3d7e28873d210058d679bce1ff0df40cad018741955d57d5b11c75/json2db-3.0.0.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "03532d41a766336a5856178427c7a004", "sha256": "c3eb53ef270a5f498e686d663f95252be86f8a8686d96435bee074a48175eff5" }, "downloads": -1, "filename": "json2db-3.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "03532d41a766336a5856178427c7a004", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14267, "upload_time": "2018-11-21T13:49:40", "url": "https://files.pythonhosted.org/packages/e6/08/aa3a8d122acb08e47ddd692d8876726f9ddbad23c332390aac0c28b8c95f/json2db-3.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac96e2ce2336a08c2471baa6020ae03c", "sha256": "0df648bc2e82fc5fa097052d76d7f73214eeb1c0839f9243408eca344520726f" }, "downloads": -1, "filename": "json2db-3.1.0.tar.gz", "has_sig": false, "md5_digest": "ac96e2ce2336a08c2471baa6020ae03c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13240, "upload_time": "2018-11-21T13:49:42", "url": "https://files.pythonhosted.org/packages/27/e7/8570fc9258c3937234b1eb714fa737b8caa48bd3abd40a50da5edbb6b34d/json2db-3.1.0.tar.gz" } ], "3.1.2": [ { "comment_text": "", "digests": { "md5": "4cdbc14d5adbeb34ef03ac9f877df6d9", "sha256": "5cfbb7cbef00d7639327be54b985942e6bb1d748faccadbb604205fac97e4c3f" }, "downloads": -1, "filename": "json2db-3.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4cdbc14d5adbeb34ef03ac9f877df6d9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14296, "upload_time": "2018-12-05T14:43:34", "url": "https://files.pythonhosted.org/packages/89/32/bd2ea4d89f81f4c2acb54030d366984c25be0990792178903226fe666eac/json2db-3.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c9158b2783ccea3d5b985b6eacc0479", "sha256": "d724a1ff090c449d8183948cac81c0ca886ed810832bf1e16123429c303564e7" }, "downloads": -1, "filename": "json2db-3.1.2.tar.gz", "has_sig": false, "md5_digest": "2c9158b2783ccea3d5b985b6eacc0479", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13279, "upload_time": "2018-12-05T14:43:36", "url": "https://files.pythonhosted.org/packages/c3/fb/29a844c0918525203868afaa2ed004b52902cc9549a57158e5704ad17114/json2db-3.1.2.tar.gz" } ], "3.2.1": [ { "comment_text": "", "digests": { "md5": "5ee68895fbd773a664afb5746c238fc6", "sha256": "1d8a537de933ab848e5041a531f2e1f81189fd92a00ed40de2fe77ab1f817089" }, "downloads": -1, "filename": "json2db-3.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ee68895fbd773a664afb5746c238fc6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14391, "upload_time": "2018-12-13T12:49:28", "url": "https://files.pythonhosted.org/packages/70/2d/0a69fff122a3f0c125188c5f8f74d94030da0cdd90417fff691c18585a06/json2db-3.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1666fc2b956af424033d5e59a70b96f8", "sha256": "123d5dbe5768349a6ab215e44cba90595fee9b45bff9bdc99fee77684310085b" }, "downloads": -1, "filename": "json2db-3.2.1.tar.gz", "has_sig": false, "md5_digest": "1666fc2b956af424033d5e59a70b96f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13348, "upload_time": "2018-12-13T12:49:31", "url": "https://files.pythonhosted.org/packages/bd/6a/266c006d98d13669d4b1e51e38ccab76f84ece49dc232d03eb1e57047cef/json2db-3.2.1.tar.gz" } ], "3.2.2": [ { "comment_text": "", "digests": { "md5": "709c46f041246488f565732ecf701d1e", "sha256": "8aa25a68a58827d4b14dceb5b0329e65ab48fe613a8607f446604ee5aea01e1a" }, "downloads": -1, "filename": "json2db-3.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "709c46f041246488f565732ecf701d1e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14396, "upload_time": "2018-12-16T08:15:32", "url": "https://files.pythonhosted.org/packages/60/7e/17ad46ef773b8fff8e03725390099304655608af4875f7b6abd69f78a840/json2db-3.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2a61a4e7d591860644ed9ac773eaf8e", "sha256": "188da108e820eaa5eae9e8597a4f2b3a0ae9a29698109bf42741c3bdfb3db94d" }, "downloads": -1, "filename": "json2db-3.2.2.tar.gz", "has_sig": false, "md5_digest": "b2a61a4e7d591860644ed9ac773eaf8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13368, "upload_time": "2018-12-16T08:15:46", "url": "https://files.pythonhosted.org/packages/49/3e/27b9b48a4694cdd5265986c7e76a0b94e096123099e94f9cd1b43cf87330/json2db-3.2.2.tar.gz" } ], "3.2.3": [ { "comment_text": "", "digests": { "md5": "9074e83e0d3bd145b3ab4a77cc2524f1", "sha256": "f8565ea3b90e05ae07d917af6b42cf1bc1c746ee761c01d04d03156111f28df0" }, "downloads": -1, "filename": "json2db-3.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9074e83e0d3bd145b3ab4a77cc2524f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14392, "upload_time": "2018-12-31T06:09:29", "url": "https://files.pythonhosted.org/packages/d5/8e/2298f7e0df5f518620026a7873bc9fc66e5d536ba6673df6ac304386ca07/json2db-3.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "431e9a7a7ae1277df40f6a0cf7d460fb", "sha256": "f2c378bb2c41dfab27f9ec00e016156ea5f74bb98dd66cd6cfe21b9fc707cb11" }, "downloads": -1, "filename": "json2db-3.2.3.tar.gz", "has_sig": false, "md5_digest": "431e9a7a7ae1277df40f6a0cf7d460fb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13368, "upload_time": "2018-12-31T06:09:31", "url": "https://files.pythonhosted.org/packages/50/b2/f1496d199ce5b7cd3d2224f8d9c7e121e9f8c42ef68b7a7f2cb2eff9592f/json2db-3.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9074e83e0d3bd145b3ab4a77cc2524f1", "sha256": "f8565ea3b90e05ae07d917af6b42cf1bc1c746ee761c01d04d03156111f28df0" }, "downloads": -1, "filename": "json2db-3.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9074e83e0d3bd145b3ab4a77cc2524f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 14392, "upload_time": "2018-12-31T06:09:29", "url": "https://files.pythonhosted.org/packages/d5/8e/2298f7e0df5f518620026a7873bc9fc66e5d536ba6673df6ac304386ca07/json2db-3.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "431e9a7a7ae1277df40f6a0cf7d460fb", "sha256": "f2c378bb2c41dfab27f9ec00e016156ea5f74bb98dd66cd6cfe21b9fc707cb11" }, "downloads": -1, "filename": "json2db-3.2.3.tar.gz", "has_sig": false, "md5_digest": "431e9a7a7ae1277df40f6a0cf7d460fb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 13368, "upload_time": "2018-12-31T06:09:31", "url": "https://files.pythonhosted.org/packages/50/b2/f1496d199ce5b7cd3d2224f8d9c7e121e9f8c42ef68b7a7f2cb2eff9592f/json2db-3.2.3.tar.gz" } ] }