var test = {}; for (var key in eventData) { key.split('.').reduce(function (lastReturn, prop, index, arr) { if (!lastReturn[prop]) { if (arr.length - 1 === index) { lastReturn[prop] = eventData[key]; } else { lastReturn[prop] = {}; } } return lastReturn[prop]; }, test); } for (var key in test) { if (key.match(/\[\d+\]/)) { var prefix = key.replace(/\[\d+\]/, ''); test[prefix] = test[prefix] || []; if (typeof test[key] === 'object') { test[key] } test[prefix].push(test[key]); delete test[key]; } }