serializeArrayPlus
by Daniel Flores
JavaScript
var $form = $('form');
$form.submit(function(e) {
e.preventDefault();
var json = {},
serializedData = $form.serializeArray();
$.map(serializedData, function(n, i) {
var arrayMarker = '^';
// Mark Arrays
n['name'] = n['name'].split('[]').join(arrayMarker);
var nameParts = n['name'].split(/[\[\]]+/),
section = json;
// Remove trailing empty strings
if(nameParts[nameParts.length - 1] == "") {
nameParts.pop();
}
console.log('length: ' , nameParts.length, nameParts);
for(var i=0; i < nameParts.length; i++) {
if(nameParts.hasOwnProperty(i)) {
var name = nameParts[i],
isArray = nameParts.hasOwnProperty(i+1) && nameParts[i+1] === arrayMarker;
if(isArray) {
if(!section.hasOwnProperty(nameParts[i]) && !$.isArray(section[nameParts[i]])) {
section[nameParts[i]] = [];
}
}
if(i == (nameParts.length - 1)) {
if(isArray) {
section[name][section[name].length] = n['value'];
} else {
section[name] = n['value'];
}
} else {
section = section[nameParts[i]] = {};
}
}
}
});
console.log(json);
});