如何从表单组创建无索引对象?能否转换指定JSON结构?
问题解决方法
一、从表单组创建无索引对象
直接遍历表单元素,以表单控件的name属性作为对象的键,控件的value作为对应的值,即可得到无索引的键值对对象。示例代码(JavaScript):
// 假设表单的id是"myForm" const form = document.getElementById('myForm'); const formDataObj = {}; // 遍历所有表单控件 Array.from(form.elements).forEach(element => { if (element.name) { // 只处理带name属性的控件 formDataObj[element.name] = element.value; } }); console.log(formDataObj);
最终得到的是一个以表单控件name为键的纯对象,无需依赖数组索引。
二、JSON结构转换说明与实现
关键问题说明
你提供的原始JSON存在重复键"id",这不符合标准JSON规范,任何标准JSON解析器都会自动覆盖重复键(最终仅保留最后一个"id"对应的对象)。若要保留两个对象,必须先修正原始数据的存储逻辑。
同时,你期望的目标结构不合法——JSON对象不能直接包含多个无键子对象,正确的集合形式应该是数组,标准格式如下:
[ { "id": "1", "type": "tst", "data": { "CompanyName": "", "Size": "2" } }, { "id": "2", "type": "tstst", "data": { "CompanyName1": "", "": "100" } } ]
转换实现
如果原始数据是未被解析的字符串(能保留重复键的原始文本),可以通过字符串处理提取内容:
const rawJsonStr = `{ "id": { "id": "1", "type": "tst", "data": { "CompanyName": "", "Size": "2" } }, "id": { "id": "2", "type": "tstst", "data": { "CompanyName1": "", "": "100" } } }`; // 提取所有"id": {...}中的子对象部分 const regex = /"id":\s*({[^}]+})/g; const result = []; let match; while ((match = regex.exec(rawJsonStr)) !== null) { // 解析提取到的子对象字符串 result.push(JSON.parse(match[1])); } console.log(JSON.stringify(result, null, 2));
执行后即可得到包含两个目标对象的合法数组结构。
内容的提问来源于stack exchange,提问作者Ggeorg
相关产品推荐
相关产品推荐

