Skip to content

Instantly share code, notes, and snippets.

@rc1021
Last active December 24, 2017 12:36
Show Gist options
  • Select an option

  • Save rc1021/b7c7cb897ee3cea2746d9525ac9b9e98 to your computer and use it in GitHub Desktop.

Select an option

Save rc1021/b7c7cb897ee3cea2746d9525ac9b9e98 to your computer and use it in GitHub Desktop.
demo serializeArray of form to json object
<!DOCTYPE html>
<html>
<head>
<title>demo serializeArray of form to json object</title>
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<form>
<input type="text" name="desc" value="demo serializeArray of form to json object.">
<input type="text" name="users[0].name" value="user A">
<input type="text" name="users[0].skills[0].name" value="PHP">
<input type="text" name="users[0].skills[0].years" value="12">
<input type="text" name="users[0].skills[1].name" value="Ruby">
<input type="text" name="users[0].skills[1].years" value="5">
<input type="text" name="users[0].skills[2].name" value="C#">
<input type="text" name="users[0].skills[2].years" value="2">
<input type="text" name="users[1].name" value="user A">
<input type="text" name="users[1].skills[0].name" value="Docker">
<input type="text" name="users[1].skills[0].years" value="5">
<input type="text" name="users[1].skills[1].name" value="AWS">
<input type="text" name="users[1].skills[1].years" value="7">
</form>
</body>
</html>
var _ = require('lodash')
$ = require('jquery');
// or
// <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
// <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
var data = _.reduce($('form').serializeArray(), function (r, o) {
var s = r, arr = o.name.split('.');
_.each(arr, (n, k) => {
var ck = n.replace(/\[[0-9]*\]$/, "");
if (!s.hasOwnProperty(ck))
s[ck] = (new RegExp("\[[0-9]*\]$").test(n)) ? [] : {};
if (s[ck] instanceof Array) {
var i = parseInt((n.match(new RegExp("([0-9]+)\]$")) || []).pop(), 10);
i = isNaN(i) ? s[ck].length : i;
s[ck][i] = s[ck][i] || {};
(k === arr.length - 1) ? s[ck][i] = o.value : s = s[ck][i];
}
else {
(k === arr.length - 1) ? s[ck] = o.value : s = s[ck];
}
})
return r;
}, {});
console.log(data);
/** output:
data: {
desc: "demo serializeArray of form to json object.",
users: [
{
name: "user A",
skills: [
{ name: "PHP", years: 12 },
{ name: "Ruby", years: 5 },
{ name: "C#", years: 2 }
]
},
{
name: "user B",
skills: [
{ name: "Docker", years: 5 },
{ name: "AWS", years: 7 }
]
}
]
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment