我正在使用以下函数将表单代码转换为JSON,它非常实用且非常棒
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
现在它给我结果如下:[如果表单字段有不同的名称],表单字段名称为direction1,direction2,direction3
{direction1: "abc", direction2: "xyz", direction3: "def"}
如果他们有相同的名称,请说出所有表单字段中的address
:它将它们组合为:
Object {address: Array[3]} address: Array[3] 0: "dfddf" 1: "dfdfdf" 2: "fewwewe"length: 3
这是正确的
我想把结果作为:
{"address": "abc"},
{"address": "xyz"},
{"address": "def"}
如何进行此更改
答案 0 :(得分:2)
我被剥夺了睡眠,所以有更好的方法来做到这一点,但如果我理解的话,这似乎可以做你想要的。这将使每个数组成为{"objkey": valAtIndex }
形式的obj数组。所以在这种情况下,Object {address: Array[3]} address: Array[3] 0: "dfddf" 1: "dfdfdf" 2: "fewwewe"length: 3
将成为:
{"address":[
{"address": "dfddf"},
{"address": "dfdfdf"},
{"address": "fewwewe"}
]}
HTML
<form action="" id="form">
<input type="text" name='address' value='123' />
<input type="text" name='address' value='456' />
</form>
JS
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
$(function() {
var t = $('#form').serializeObject();
Object.keys(t).forEach(function(key) {
if (t[key].constructor === Array) {
t[key].forEach(function(a, i) {
var obj = {};
obj[key] = a;
t[key][i] = obj;
});
}
});
var myAddresses = t["address"];
console.log(JSON.stringify(myAddresses, null, 4));
});
修改:要访问它们,请使用上述t["address"]
。运行代码后查看控制台,您会看到:
[
{ "address": "123" },
{ "address": "456" }
]
编辑:删除令人困惑的&#34;结果&#34;部分。
答案 1 :(得分:0)
看起来你只是扩展和对象,而不是像你想要的那样创建一个数组。 无论是类似JSON的对象还是数组,如果您希望它们作为单独的对象,您仍然需要具有与每个对应对应的键。所以,而不是:
o[this.name]=this.value
你需要
var obj={};
obj[this.name]=this.value;
然后:
o.push(obj);
或者:
o[a key of your definition]=obj;
然后,这将为您提供o
内的单独对象。