Javascript 将多维html表单数据转换为json

Javascript 将多维html表单数据转换为json,javascript,jquery,json,Javascript,Jquery,Json,我有一张有几个文本框的表格。我希望将整个表单序列化为json,使这些文本框保留在一个数组中。我有下面的html <form id ="myform"> <input type="text" name="options[]"/> <input type="text" name="options[]"/> <input type="text" name="options[]"/> <input type="text

我有一张有几个文本框的表格。我希望将整个表单序列化为json,使这些文本框保留在一个数组中。我有下面的html

<form id ="myform">
    <input type="text" name="options[]"/>
    <input type="text" name="options[]"/>
    <input type="text" name="options[]"/>
    <input type="text" name="options[]"/>
</form>
这给了我以下信息:

  {
    "options[]":"Content of the last textbox"
  }
但是我想要

  {
   "options":
             {
              "0":"value",
              "1":"value",
              "2":"value",
              "3":"value",
             }
  }

如何使用javascript实现这一点?

这可以通过jQuery
serializeArray()
作为辅助工具手动完成

var serializedArray = $('#myform').serializeArray();
var customArray = {};
customArray['options'] = {};
for(key in serializedArray)
{
    customArray['options'][key] = serializedArray[key]['value'];
}

试试这个

<script type="text/javascript">
    $(document).ready(function(){

        $("#myform").submit(function(event){
            var foo=$(this).serializeArray();
            var option={"option":foo};

            console.log(JSON.stringify(option));
            return false;
        });


    });


      </script>

$(文档).ready(函数(){
$(“#myform”).submit(函数(事件){
var foo=$(this.serializeArray();
var option={“option”:foo};
log(JSON.stringify(选项));
返回false;
});
});

所以在我自己解决了同样的问题后,我遇到了这个问题。 我到处寻找一个解决方案,感觉我缺少了一些基本的东西(javascript/jquery或.NETMVC),可以帮我做到这一点。 但这就是我最终解决了一个与你类似的问题的方式

var serializeForm=函数(表单){
var结果=[];
var buildArray=函数m(名称、值){
var match=name.match(/\[\d+\]/);
如果(!匹配){
var ret={};
ret[name]=值;
返回ret;
}否则{
var ret={};
var thisName=name.slice(0,match.index);
var index=match[0]。match(/\d+/)[0];
ret[thisName]=m(name.slice(match.index+match[0].length+1),值);
ret.index=指数;
返回ret;
}
};
$。每个(形式、功能(i、o){
push(buildArray(o.name,o.value));
});
var json={};
var buildObject=函数m(json,o){
var indexKey=‘索引’;
for(变量输入o){
如果(键!=索引键){
if(o.hasOwnProperty(indexKey)){
如果(!json.hasOwnProperty(键)){
json[key]=[];
}
如果(!json[key].hasOwnProperty(o[indexKey])){
json[key][o[indexKey]]={};
}
json[key][o[indexKey]]=m(json[key][o[indexKey]],o[key]);
}否则{
json[key]=o[key];
}
}
}
返回json;
}
$。每个(结果、函数(i、o){
buildObject(json,o);
});
返回json;
}
$(函数(){
log(serializeForm($('form').serializeArray());
});


实际上,它并没有为您提供所有->,而是为您提供了一个格式正确的数组,用于格式为www-urlencoded的ajax请求。“最后一个复选框的内容”?但是您使用的是文本字段。
serializeArray
对此没有帮助。您必须手动构建json可能的副本我已经更新了我的答案,我希望这是您问题的更好解决方案。您是否建议
serializeArray
不使用
[]
处理名称?这两个方法应该是相同的,但一个返回querystring,另一个返回数组?我认为这不是一个好答案。这根本不能解决问题all@adeneo,你说得对,我已经更新了我的答案。谢谢你的提示。我知道这只是部分回答了你的问题。我的问题和你的不同。但也许你可以修改它来解决你的问题?
var arr = $("#myform").serializeArray();
var result = {"objects":{}};
arr.forEach(function (elem, i) {
    result.objects[i] = elem["value"];
});

console.log(JSON.stringify(result));
<script type="text/javascript">
    $(document).ready(function(){

        $("#myform").submit(function(event){
            var foo=$(this).serializeArray();
            var option={"option":foo};

            console.log(JSON.stringify(option));
            return false;
        });


    });


      </script>