Add automatic JSON deserialization feature #698
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add automatic JSON deserialization support
This PR implements automatic JSON deserialization for columns declared with the
JSONtype, as requested in #612. It introduces a newuse_json_converters=Trueoption that allows the library to automatically handle nested Python structures (dictionaries, lists, and tuples) by storing them inJSONcolumns and deserializing them back into native Python objects upon retrieval.Key Changes
use_json_converters: bool = Falseargument. When enabled:JSONtype usingjson.loads.sqlite3.PARSE_DECLTYPESon the connection.COLUMN_TYPE_MAPPINGto include"JSON": "JSON".types_for_column_types) to accept a json_converters parameter. IfTrue, nested structures are inferred as dict or list (mapping toJSON) rather than str.--use-json-convertersflag to the following commands:create-tableSupport: Thecreate-tableCLI command andTable.create()API now explicitly support"JSON"(case-insensitive) as a valid column type.Validation
JSONtype support.black,flake8, andmypychecks.Documentation
--use-json-convertersflag and theJSONtype forcreate-table.3.40release indocs/changelog.rst.Closes #612
📚 Documentation preview 📚: https://sqlite-utils--698.org.readthedocs.build/en/698/