<form action="">
<input name='users[123][name]' value="312"/>
</form>
<div class="result"></div>
const serialize = (form) => {
const obj = {};
const inputs = [...form.querySelectorAll('input')];
inputs.forEach((input) => {
const params = input.name.match(/(?<=\[)\S+?(?=\])|^\S+?(?=\[)/g);
const value = input.value;
params.reduce((current, param, i, arr) => {
if (!obj[param]) current[param] = {};
if (i === arr.length - 1) current[param] = value;
return current[param];
}, obj);
});
return obj;
};
const writeResult = (form) => {
const obj = JSON.stringify(serialize(form));
document.querySelector('.result').innerText = obj;
};
const form = document.querySelector('form');
writeResult(form);
form.addEventListener('input', () => writeResult(form));
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.