如何避免硬编码键名,生成动态键名的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
相关产品推荐
相关产品推荐

