动态创建嵌套的JSON对象

(上下文)我从一堆元素中获取信息,我将其收集到一个JSON对象中,然后传递给MVC3控制器,在那里它被反序列化为一个对象。

有“商品”和“商品设置”。 目前,我在平面JSON对象中都有项目和项目设置。 理想情况下,我希望将项目设置嵌套在每个项目下。 我的代码目前看起来像这样:

var editeditems=[]; ... $("#SaveChanges").click(function() { //this works and retrieves all of the item IDs $(".portlet").each(function() { var itemname = $(this).data("itemname"); editeditems.push( { "itemname": itemname }); itemname = $(this).data("itemname"); $(".settingInput").each(function() { editeditems.push( { "settingkey":$(this).attr("name"), "settingvalue":$(this).attr("value") }); }); }); 

在$(“。settingInput”)下。每个函数都是添加设置的地方。 我尝试过像’editedItems.settings.push ..’这样的语法,但它返回时出现语法错误。

任何帮助将不胜感激!

 var editeditems = []; ... $('#SaveChanges').click(function() { $('.portlet').each(function() { var settings = []; $('.settingInput').each(function() { settings.push({ settingkey: $(this).attr('name'), settingvalue: $(this).attr('value') }); }); editeditems.push({ itemname: $(this).data('itemname'), settings: settings }); }); ... }); 

将生成样本输出:

 var editeditems = [ { "itemname": "item1", "settings": [ { "settingkey": "key1", "settingvalue": "value1" }, { "settingkey": "key2", "settingvalue": "value2" } ] }, { "itemname": "item2", "settings": [ { "settingkey": "key1", "settingvalue": "value3" }, { "settingkey": "key2", "settingvalue": "value4" } ] } ]; 
 var ei = {'settings': [3]}; ei.settings.push(4); console.log(ei); // This will output an object with property settings and value an array with values (3 and 4) 

只需要创建平面数据数组json就好了

 [{"itemname": "item1","settingkey": "key1","settingvalue": "value1"}, {"itemname": "item2","settingkey": "key2","settingvalue": "value2"},]; 

不仅仅是这样的过程

 var keys = Object.keys(dataMap); var json = []; for (var key in keys) { var innerJson = {}; innerJson["name"] = keys[key]; var innerMap = dataMap[keys[key]]; if (innerMap instanceof Array) { innerJson["size"] = innerMap[0]; } else if (innerMap instanceof Object) { var child = processHirarchiachalData(innerMap); innerJson["children"] = child; } json.push(innerJson); }