Javascript 从动态表单创建嵌套JSON
我有一个客户机的自定义页面生成器,他们可以通过拖放后端构建自己的web表单 目前,我可以将数据以JSON格式输出,如下所示:Javascript 从动态表单创建嵌套JSON,javascript,jquery,json,api,Javascript,Jquery,Json,Api,我有一个客户机的自定义页面生成器,他们可以通过拖放后端构建自己的web表单 目前,我可以将数据以JSON格式输出,如下所示: { "email":"xx@yy.com", "geoip_country":"XXYY", "geoip_state":"XXYY", "geoip_city":"XXYY", } 但是,我需要按以下格式更改输出,我想将email字段从表单中分离出来,并删除嵌套在dynamic_attributes部分中的所有其他数据,如下所示: { "em
{
"email":"xx@yy.com",
"geoip_country":"XXYY",
"geoip_state":"XXYY",
"geoip_city":"XXYY",
}
但是,我需要按以下格式更改输出,我想将email字段从表单中分离出来,并删除嵌套在dynamic_attributes部分中的所有其他数据,如下所示:
{
"email":"xx@yy.com",
"dynamic_attributes":{
"geoip_country":"XXYY",
"geoip_state":"XXYY",
"geoip_city":"XXYY",
// all other form fields here.
},
}
谁能给我指一下正确的方向吗?我对输出JSON没有太多经验-我还应该补充一点,JSON是通过以下jQuery函数创建的:
(function ($) {
$.fn.serializeFormJSON = 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;
};
})(jQuery);
参见小提琴:
谢谢 试试这个:
$('#myform')。提交(函数(e){
e、 预防默认值();
var data=$(this.serializeFormJSON();
控制台日志(数据);
});
(函数($){
$.fn.serializeFormJSON=函数(){
var o={};
var动态_属性={};
var a=this.serializeArray();
$。每个(一个,函数(){
如果(this.name=='email'){
if(o[this.name]){
如果(!o[this.name].push){
o[this.name]=[o[this.name]];
}
o[this.name].push(this.value | |“”);
}否则{
o[this.name]=this.value | |“”;
}
}否则{
if(动态_属性[this.name]){
如果(!dynamic_attributes[this.name].push){
动态_属性[this.name]=[dynamic_属性[this.name]];
}
动态_属性[this.name].push(this.value | |“”);
}否则{
动态_属性[this.name]=this.value | |“”;
}
}
});
o['dynamic_attributes']=dynamic_attributes;
返回o;
};
})(jQuery)代码>
.hidden{opacity:.3}
要导入库,请执行以下操作:
使用库制作的示例表单:
单击submit按钮后,将生成以下对象并将其作为JSON字符串发送:
{
"user" : {
"name" : "testUser"
},
"color" : ["blue", "red"]
}
JSON字符串作为名为deepFormJSON
的参数值发送:
deepFormJSON : '{"user":{"name":"testUser"},"color":["blue","red"]}}'
可以将其解析为JSON字符串,以便在请求目的地构造对象。是dynamic\u attributes
常量属性名吗?如果不是的话,这个财产的名字从哪里来?字段如何作为主字段或子字段分隔?显示一些示例htmlBoth动态属性和电子邮件是常量属性名称,嵌套在动态属性中的数据是动态生成的。编辑以添加fiddle链接,因此它是一个简单的表单,并且始终有一个主要字段是电子邮件
,而所有其他字段都是嵌套的?我怀疑还有比这更高层次的复杂性不?太棒了,谢谢你-我已经很好地理解了我们是如何从顶部的变量创建这些属性的,我已经开始创建另一个名为extra_parameters的属性,因为我们的集成也需要它。-还有一个问题,您知道我如何才能通过名称/类或ID排除某些输入吗?忽略这一点,我已经通过在jquery中克隆表单、删除隐藏的输入,然后运行serializeFormJSON()函数来实现这一点。再次感谢Sunwoo。我很抱歉稍后确认这些评论。很高兴听到这个消息。