You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从表单组创建无索引对象?能否转换指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:17:41