-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.serializeFormToJson.js
76 lines (63 loc) · 2.24 KB
/
jquery.serializeFormToJson.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/**
* jQuery serializeFormToJson Plugin
* Version: 1.0
*
* A jQuery plugin to serialize form data into nested JSON objects.
* Converts form data with array-like names into structured JSON.
*
* @author Nabeel Javaid <[email protected]>
* @version 1.0
*/
(function($) {
// Define the plugin function
$.fn.serializeFormToJson = function() {
// Function to serialize form data to JSON
function serializeFormData($form) {
var formData = $form.serializeArray();
var jsonData = {};
// Process each form field
$.each(formData, function() {
var name = this.name;
var value = this.value;
// Split the name into parts to navigate through nested structure
var nameParts = name.split('[').map(function(part) {
return part.replace(']', '');
});
var currentLevel = jsonData;
// Traverse through the nested structure and create objects as needed
for (var i = 0; i < nameParts.length; i++) {
var isArray = /\[\d+\]/.test(nameParts[i]); // Check if current part is an array index
if (isArray) {
var arrayName = nameParts[i].substring(0, nameParts[i].indexOf('['));
var index = parseInt(nameParts[i].match(/\d+/)[0]);
if (!currentLevel[arrayName]) {
currentLevel[arrayName] = [];
}
if (!currentLevel[arrayName][index]) {
currentLevel[arrayName][index] = {};
}
if (i === nameParts.length - 1) {
currentLevel[arrayName][index] = value || '';
} else {
currentLevel = currentLevel[arrayName][index];
}
} else {
if (!currentLevel[nameParts[i]]) {
if (i === nameParts.length - 1) {
currentLevel[nameParts[i]] = value || '';
} else {
currentLevel[nameParts[i]] = {};
}
}
if (typeof currentLevel[nameParts[i]] === 'object') {
currentLevel = currentLevel[nameParts[i]];
}
}
}
});
return jsonData;
}
// Return serialized JSON data
return JSON.stringify(serializeFormData(this), null, 2);
};
})(jQuery);