Fully Featured Form Serializer In jQuery - serializeJSON
File Size: | 148 KB |
---|---|
Views Total: | 889 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

serializeJSON is a robust jQuery based form serializer that makes it easier to serialize your form data into a JavaScript object containing key/value pairs for further use.
Key Features:
- Easy to use.
- Supports nested attributes and arrays.
- Supports almost all form fields like input, select, checkbox, ...
- Supports custom data types: string, boolean, number, array, object, ...
See Also:
How to use it:
1. Insert the JavaScript file jquery.serializejson.min.js
after loading jQuery library and we're ready to go.
<script src="/path/to/cdn/jquery.slim.min.js"></script> <script src="/path/to/jquery.serializejson.js"></script>
2. Call the function on your HTML form to serialize the form data into a JavaScript object.
<form> <!-- Basic --> <input type="text" name="username" value="jqueryscript" /> <!-- Nested Attributes --> <input type="text" name="site[name]" value="jQuery Script" /> <input type="url" name="site[url]" value="https://www.jqueryscript.net/" /> <!-- Nested Arrays --> <input type="hidden" name="plugins[0][popular]" value="0" /> <input type="checkbox" name="plugins[0][popular]" value="1" checked /> <textarea name="plugins[1][name]"></textarea> <!-- Select --> <select multiple name="selectMultiple[]"> <option value="html" selected>HTML</option> <option value="css" selected>CSS</option> <option value="js">JavaScript</option> </select> </form>
const result = $('form').serializeJSON();
3. Convert the JavaScript object into a JSON string if needed.
const json = JSON.stringify(result);
4. Determine the data type (string by default) by using the :type
suffix or data-value-type
attribute:
<input type="text" name="excluded:skip" value="ignored field" /> <input type="text" name="numbers[1]:number" value="1" /> <input type="text" name="bools[true]:boolean" value="true" /> <input type="text" name="nulls[null]:null" value="null" /> <input type="text" name="arrays[list]:array" value="[1, 2, 3]"/> <input type="text" name="objects[dict]:object" value='{"key": "value"}' /> <input type="text" name="anarray" data-value-type="array" value="[1, 2, 3]"/>
5. Or specify a data type using the customTypes
function:
$('form').serializeJSON({ customTypes: { myType: (strVal, el) => { // strVal: is the input value as a string // el: is the dom element. $(el) would be the jQuery element }, } });
6. Handle the uncheck value of your checkbox:
<input type="checkbox" name="checked[b]:boolean" value="true" data-unchecked-value="false" checked /> <input type="checkbox" name="checked[numb]" value="1" data-unchecked-value="0" checked /> <input type="checkbox" name="checked[cool]" value="YUP" checked />
$('form').serializeJSON({ checkboxUncheckedValue: 'NOPE' });
7. Full configuration options:
$('form').serializeJSON({ // to include that value for unchecked checkboxes (instead of ignoring them) checkboxUncheckedValue: undefined, // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]} useIntKeysAsArrayIndex: false, // skip serialization of falsy values for listed value types skipFalsyValuesForTypes: [], // skip serialization of falsy values for listed field names skipFalsyValuesForFields: [], // do not interpret ":type" suffix as a type disableColonTypes: false, // extends defaultTypes customTypes: {}, // default types defaultTypes: { "string": function(str) { return String(str); }, "number": function(str) { return Number(str); }, "boolean": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1; }, "null": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1 ? str : null; }, "array": function(str) { return JSON.parse(str); }, "object": function(str) { return JSON.parse(str); }, "skip": null // skip is a special type used to ignore fields }, // default type defaultType: "string", });
This awesome jQuery plugin is developed by marioizquierdo. For more Advanced Usages, please check the demo page or visit the official website.