Form Based JSON Editor For jQuery - jsonToForm
File Size: | 123 KB |
---|---|
Views Total: | 10826 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

A simple, jQuery based JSON editor to dynamically generate editable forms from JSON schemas so that the uses are able to view, edit and valid JSON data in a simple way.
How to use it:
1. Import jQuery library and the jsonToForm's files into the document.
<!-- Required --> <script src="/path/to/cdn/jquery.min.js"></script> <script src="/path/to/jsonToForm/jsonToForm.js"></script> <link href="/path/to/jsonToForm/jsonToForm.css" rel="stylesheet" /> <!-- Themes (OPTIONAL) --> <link href="/path/to/src/styles/jsonToForm.branded.css" rel="stylesheet" /> <link href="/path/to/src/styles/jsonToForm.clean.css" rel="stylesheet" /> <link href="/path/to/src/styles/jsonToForm.modern.css" rel="stylesheet" />
2. Create a DIV container to place the generated HTML form.
<div id="jsonEditor"></div>
3. Create a Pre element to place the updated JSON.
<pre id="jsonValue"></pre>
4. Prepare your JSON schemas and values as follows:
var s = { "title": "json schema sample", "type": "object", "properties": { "stringField": { "title": "String Field", "type": "string", "minLength": 5, "maxLength": 10, "ui": { "placeholderHint": "Enter string", "hoverHint": "this is a text for test the mouse hover", "inlineHint": "this is a text to show we can additional text below the input box", "validationHint": "length of your text must be >4 and <11 characters" } }, "colorField": { "title": "Color Field", "type": "string", "ui": { "editor": "color" } }, "dateField": { "title": "Date Field", "type": "string", "ui": { "editor": "date" } }, "numberField": { "title": "Number Field", "type": "number", "minimum": 5, "maximum": 10, "ui": { "editor": "number" } }, "booleanField": { "title": "Boolean Field", "type": "boolean" }, "HtmlField": { "title": "Html Field", "type": "string", "minLength": 5, "maxLength": 10, "ui": { "editor": "html" } }, "selectField": { "title": "Select Field", "type": "string", "enum": [ "item 1", "item 2" ], "ui": { "editor": "select" } }, "radioField": { "title": "Radio Field", "type": "string", "enum": [ "item 1", "item 2" ], "ui": { "editor": "radio" } }, "stringArray": { "title": "String Array", "type": "array", "items": { "type": "string" }, "ui": { "inlineHint": "this is an inline hint for ..." } }, "objectArray": { "title": "Object Array", "type": "array", "items": { "$ref": "#/definitions/objectField" } } }, "required": [ "stringField", "booleanField", "selectField", "htmlField" ], "ui": { "inlineHint": "this is an inline hint for main node" }, "definitions": { "objectField": { "type": "object", "properties": { "name": { "type": "string" }, "type": { "type": "string", "enum": [ "STRING", "CHAR", "TEXT" ] }, "allowNull": { "type": "boolean" }, "relation": { "type": "object", "properties": { "tableName": { "type": "string" }, "keyFieldName": { "type": "string" } } } }, "required": [ "name", "type" ] }, "API": { "type": "object", "properties": { "name": { "type": "string" }, "type": { "type": "string", "enum": [ "CREATE", "READ", "UPDATE", "DELETE" ] }, "allowedFields": { "type": "array", "items": { "type": "string" } } } } } }; var v = { "stringField": "my string", "colorField": "#008000", "dateField": "2019-01-17", "numberField": "6", "booleanField": true, "HtmlField": "this is a <b>html</b>", "selectField": "item 2", "radioField": "item 1", "stringArray": [ "s 1", "s 2" ], "objectArray": [ { "name": "my field", "type": "CHAR", "allowNull": true, "relation": { "tableName": "t1", "keyFieldName": "f1" } } ] };
5. Populate the HTML form with the JSON schemas and values.
var myEditor = $("#jsonEditor").jsonToForm({ "schema": s, "value": v, "afterValueChanged": function (newValue, newSchema) { $("#jsonValue").html(JSON.stringify(newValue, null, 2)); setValidity(); }, "afterWidgetCreated": function (newValue, newSchema) { $("#jsonValue").html(JSON.stringify(newValue, null, 2)); setValidity(); } });
6. Available options to customize the JSON editor.
var myEditor = $("#jsonEditor").jsonToForm({ // expanding level // -1 = all levels expandingLevel: -1, // renders the first level as a container renderFirstLevel: 'false', // auto trims values autoTrimValues: 'true', // blank space indenting: 5, // captions when null radioNullCaption: 'null', selectNullCaption: '', // shows expand/collapse buttons treeExpandCollapseButton: 'true' });
7. API methods.
// checks if is valid myEditor.isValid(); // gets JSON schemas myEditor.getSchema(); // gets values myEditor.getValue(); // sets values myEditor.setValue('setValue', value);
8. Enable dark mode on your webpage.
<body data-json-form-theme="dark"> ... </body>
Changelog:
v2.0 (2025-09-30)
- Modern ES6+ Architecture: Complete rewrite using ES6 classes and modules
- TypeScript Support: Full TypeScript definitions included
- Advanced Validation System: Real-time validation with custom rules
- Modular Design: Separated into JsonToForm, Renderer, Validator, EventHandler, and Utils modules
- Modern CSS Framework: Two themes (Modern and Clean) with CSS custom properties
- Enhanced RTL Support: Better right-to-left language support for Persian/Arabic
- New Input Types: Added email, tel, url, date, time, datetime-local support
- Array Management: Dynamic add/remove items in arrays
- Object Nesting: Better nested object rendering and management
- Event System: Enhanced event handling with proper cleanup
- Persian Demo: Complete Persian (Farsi) demonstration with RTL layout
- CSS Architecture: Modern CSS with custom properties, Flexbox, and Grid
- Responsive Design: Mobile-first approach with better responsive behavior
- Color Palette: Clean, modern color scheme with proper contrast ratios
- Typography: Improved font system and text hierarchy
- Layout System: Better spacing and alignment using CSS Grid/Flexbox
- Form Controls: Enhanced styling for all input types
- Button Design: Modern button styles with hover and focus states
- Breaking Changes: New API structure (methods now accept method name as first parameter)
- File Structure: Organized into src/ directory with proper module separation
- CSS Classes: Updated class naming convention for better clarity
- Method Names: Consistent API method naming
- Options Object: Restructured options for better organization
- Container Overflow: Fixed form controls extending beyond their containers
- Input Width Issues: Proper max-width: 100% and box-sizing: border-box
- RTL Layout: Better right-to-left text direction handling
- Validation Timing: Fixed validation timing and error display
- Memory Leaks: Proper event cleanup and object disposal
- CSS Specificity: Better CSS specificity management
2024-05-21
- Update jsonToForm.js
2023-07-27
- Fixed Nested array
2023-05-25
- Renamed to jsonToForm
2021-02-18
- NotRequired option effect on radio fields and Some css small changes
2020-06-01
- Adding tel and email types
This awesome jQuery plugin is developed by mirshahreza. For more Advanced Usages, please check the demo page or visit the official website.