Javascript 从动态表单创建嵌套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

我有一个客户机的自定义页面生成器,他们可以通过拖放后端构建自己的web表单

目前,我可以将数据以JSON格式输出,如下所示:

{ 
  "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。我很抱歉稍后确认这些评论。很高兴听到这个消息。