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

如何避免硬编码键名,生成动态键名的JSON数据

解决JSON键名固定及结构问题

你的代码存在两处问题,导致生成的JSON不符合预期:

  • 对象字面量中的name是固定字符串键名,并非动态引用输入框的name属性值;
  • 当前逻辑将每个输入项作为独立对象存入数组,但你需要的是单个对象包含所有输入键值对。

修改后的代码(生成单对象键值对):

var allFields = {}; // 替换数组为对象,用于收集所有键值对
var inputs = document.getElementsByTagName('input');
for(var i=0; i<inputs.length;i++){
    var name = inputs[i].name; // 声明局部变量,避免全局污染
    var item = inputs[i].value;
    allFields[name] = item; // 动态使用输入框name作为键名
}
var alleFelder = JSON.stringify(allFields);
alert(alleFelder);

关键修改点:

  • 将allFields从数组[]改为普通对象{},确保所有输入键值对都存入同一个对象;
  • 使用allFields[name] = item的语法,让输入框的name属性值作为动态键名,替代固定的"name";
  • 给name和item添加var声明,避免意外创建全局变量。

若需保留数组结构(每个输入项为数组内独立对象):

如果你确实需要数组格式(例如[{"name":"john"},{"lastname":"brooks"}]),可调整代码如下:

var allFields = [];
var inputs = document.getElementsByTagName('input');
for(var i=0; i<inputs.length;i++){
    var name = inputs[i].name;
    var item = inputs[i].value;
    var field = {};
    field[name] = item; // 动态设置对象键名
    allFields.push(field);
}
var alleFelder = JSON.stringify(allFields);
alert(alleFelder);

内容的提问来源于stack exchange,提问作者ncaffrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:10:44