Javascript 基于选定的嵌套复选框生成JSON

Javascript 基于选定的嵌套复选框生成JSON,javascript,jquery,arrays,json,object,Javascript,Jquery,Arrays,Json,Object,我已经以嵌套方式基于JSON动态创建了一组复选框输入。现在,我想将所有选中复选框作为父子表单中的数组获取,如下所示: let数据={ “个人信息”:{ “标签”:“个人信息”, “儿童”:{ “名字”:{ “类型”:“字符串”, “标签”:“名字”, “可选”:false }, “姓氏”:{ “类型”:“字符串”, “标签”:“姓氏”, “可选”:false }, “dob”:{ “类型”:“日期”, “标签”:“出生日期”, “可选”:false }, “性别”:{ “类型”:“字符串”,

我已经以嵌套方式基于JSON动态创建了一组复选框输入。现在,我想将所有选中复选框作为父子表单中的数组获取,如下所示:

let数据={
“个人信息”:{
“标签”:“个人信息”,
“儿童”:{
“名字”:{
“类型”:“字符串”,
“标签”:“名字”,
“可选”:false
},
“姓氏”:{
“类型”:“字符串”,
“标签”:“姓氏”,
“可选”:false
},
“dob”:{
“类型”:“日期”,
“标签”:“出生日期”,
“可选”:false
},
“性别”:{
“类型”:“字符串”,
“标签”:“性别”,
“可选”:false
},
“高度”:{
“类型”:“字符串”,
“标签”:“高度”,
“可选”:false
},
“重量”:{
“类型”:“字符串”,
“标签”:“重量”,
“可选”:false
},
“血型”:{
“类型”:“字符串”,
“标签”:“血型”,
“可选”:false
},
“地址”:{
“标签”:“地址”,
“儿童”:{
“地址行-1”:{
“类型”:“字符串”,
“标签”:“地址”,
“可选”:false
},
“地址行-2”:{
“类型”:“字符串”,
“标签”:“地址”,
“可选”:false
},
“城市”:{
“类型”:“字符串”,
“标签”:“城市”,
“可选”:false
},
“国家”:{
“类型”:“字符串”,
“标签”:“国家”,
“可选”:false
},
“国家”:{
“类型”:“字符串”,
“标签”:“国家”,
“可选”:false
},
“zipcode”:{
“类型”:“字符串”,
“标签”:“邮政编码”,
“可选”:false
}
}
},
“紧急联系人”:{
“标签”:“紧急联系人”,
“儿童”:{
“姓名”:{
“类型”:“字符串”,
“标签”:“邮政编码”,
“可选”:false
},
“电话”:{
“类型”:“字符串”,
“标签”:“电话”,
“可选”:false
},
“电子邮件”:{
“类型”:“字符串”,
“标签”:“电子邮件”,
“可选”:false
}
}
}
}
},
“一般信息”:{
“标签”:“一般信息”,
“儿童”:{
“过敏”:{
“类型”:“字符串”,
“标签”:“过敏”,
“可选”:true
},
“习惯”:{
“类型”:“字符串”,
“标签”:“习惯”,
“可选”:true
}
}
},
“历史”:{
“标签”:“历史记录”,
“儿童”:{
“地位”:{
“类型”:“布尔值”,
“标签”:“状态”,
“可选”:false
},
“创建数据”:{
“类型”:“日期”,
“标签”:“创建数据”,
“可选”:false
},
“问题”:{
“类型”:“文本”,
“标签”:“主要投诉”,
“可选”:true
},
“诊断”:{
“类型”:“文本”,
“标签”:“诊断”,
“可选”:true
},
“处方”:{
“类型”:“文本”,
“标签”:“处方”,
“可选”:true
},
“实验室结果”:{
“标签”:“实验室结果”,
“儿童”:{
“测试名称”:{
“类型”:“字符串”,
“标签”:“测试名称”,
“可选”:false
},
“loinc”:{
“类型”:“字符串”,
“标签”:“Loinc”,
“可选”:false
},
“正常范围”:{
“类型”:“字符串”,
“标签”:“正常范围”,
“可选”:false
},
“单位”:{
“类型”:“字符串”,
“标签”:“单位”,
“可选”:false
},
“价值”:{
“类型”:“字符串”,
“标签”:“值”,
“可选”:false
},
“测试结果”:{
“类型”:“字符串”,
“标签”:“测试名称”,
“可选”:false
},
“创建数据”:{
“类型”:“日期时间”,
“标签”:“时间”,
“可选”:false
},
“地位”:{
“类型”:“布尔值”,
“标签”:“状态”,
“可选”:false
}
}
},
“用药史”:{
“标签”:“用药史”,
“儿童”:{
“药物名称”:{
“类型”:“字符串”,
“标签”:“药物名称”,
“可选”:false
},
“说明”:{
“类型”:“字符串”,
“标签”:“注释”,
“可选”:false
},
“地位”:{
“类型”:“布尔值”,
“标签”:“状态”,
“可选”:false
},
“数量”:{
“类型”:“字符串”,
“标签”:“数量”,
“可选”:false
},
“采取行动的时间”:{
“类型”:“字符串”,
“标签”:“需要花费的时间数量”,
“可选”:false
},
“创建数据”:{
“类型”:“日期”,
“标签”:“日期”,
“可选”:false
}
}
}
}
}
};
设nodeLevel=1;
函数addItem(parentUL、branch、parentName){
for(分支中的var键){
//console.log('Branch',Branch[key]);
//log('Key:',Key);
var item=branch[key]。子项;
//console.log('Item:',Item)
让name='';
if(父项名称){
姓名=父姓名;
}
$item=$(“
  • ”{ id:钥匙 }); $item.append($(''){ 键入:“复选框”, id:钥匙, 姓名:key,, 值:键, “数据父项”:名称 })); //$item.attr('data-parent',name); $item.append($(''){ 对于:键, 正文:
    const walkCheckedTree = (opts) => Object
        .entries(opts)
        .reduce((t, [k, v]) => {
          const cb = root.querySelector(`[name=${k}]`);
    
          if (cb.checked) {
            if (v.children) {
              t[k] = { child: walkCheckedTree(v.children) };
            } else {
              t[k] = k;
            }
          }
    
          return t;
        }, {});
    
    const tree = walkCheckedTree(data);