A JSON file management system with a graphical interface, developed in Python with Tkinter. It allows editing, validating, and maintaining structured JSON files according to a defined schema.
This system is designed to function as a visual JSON database editor, allowing you to:
- Validate JSON data against a schema defined in a model file
- View and edit data in a user-friendly way with appropriate widgets for each data type
- Add and remove records following the defined schema
- Easily search for information, navigate, and manipulate records
- Export and save the edited data
- Python 3.6 or higher
- Tkinter (included in most standard Python installations)
- For full drag-and-drop support on Windows, the
pywin32module is recommended:pip install pywin32
- Clone this repository or download the files
- Ensure that Python 3.6+ is installed
- (Optional) Install
pywin32for full drag-and-drop support on Windows
Run the main file:
python main.py
- Load a JSON model file (containing the
__meta__definition) - Load a JSON data file or create a new dataset
- Edit, add, or remove records as needed
- Save the changes to the original file or a new file
The model file must contain a JSON object with a __meta__ property that defines the expected data structure:
{
"__meta__": {
"field_name": {
"type": "data_type",
"required": true_or_false
},
...
}
}str- Stringsint- Integersfloat- Floating-point numbersbool- Boolean values (true/false)list- Generic listslist[type]- Typed lists (e.g.,list[str]). This also applies tolist[dict], allowing the creation of lists of objects with a defined structure.dictorobject- Nested dictionaries. If the model specifies the dictionary fields, the editing interface will display structured fields. Otherwise, a generic key-value pair interface will be used.
{
"__meta__": {
"name": { "type": "str", "required": true },
"email": { "type": "str", "required": false },
"age": { "type": "int", "required": false },
"active": { "type": "bool", "required": true },
"tags": { "type": "list[str]", "required": false },
"address": {
"type": "dict",
"required": false,
"fields": {
"street": { "type": "str", "required": true },
"city": { "type": "str", "required": true },
"zipcode": { "type": "str", "required": false }
}
}
}
}- Real-time validation: Identifies missing required fields and incorrect data types
- Spreadsheet-like interface: Grid view with individual cell editing
- Type-appropriate editing: Text inputs, checkboxes, numeric fields, etc.
- Search: Searches for content in any field
- Action history: Support for undo/redo operations
- Light/dark theme: Toggles between themes for better visual comfort
- Drag and drop: Support for loading files via drag & drop
- Export: Saves data in JSON format
Ctrl+O- Load model fileCtrl+D- Load data fileCtrl+S- Save dataCtrl+N- Add new entryDelete- Delete selected entryCtrl+Z- UndoCtrl+Y- RedoCtrl+F- Focus on search fieldF3- Next search resultShift+F3- Previous search result
The system comes with example files in the examples/ folder:
example_model.json- An example model with various field typesexample_data.json- Example data compatible with the model.complex_model.json- A more complex model, demonstrating dictionaries and lists with nested structures.complex_data.json- Corresponding data for the complex model.
- Limited support for deeply nested structures
- No support for schema validation via JSON Schema or similar
- No native support for cross-object references
This project is distributed under the MIT license.