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

如何使用嵌套for循环从JSON中取值并为对应字段动态赋值?

错误原因

你写的嵌套循环无法运行,是三个写法错误导致的:

  • 错误使用const关键字:const仅用于声明块级作用域常量,给对象动态挂载属性不需要加const修饰
  • 索引与动态键写法错误:内层循环遍历字段定义用的索引是j,你却用i取subject项;同时obj.subject[i].field是直接取subject数组项的field属性值,没有把field的值作为动态键名使用
  • 没有创建行级独立对象:直接往原始obj.subject上写属性会污染原始字段定义,多轮循环会互相覆盖值

另外你最初手动写的硬编码版本本身还有个手误bug:IsActive字段对应列索引是4,你写成了3,和Gender字段取了同一个位置的值。

修正实现

核心逻辑是每遍历一行value数组,就新建一个独立空对象,遍历subject字段定义时,以每个字段的field值为动态键,对应行的列值为键值存入对象,组装完成的行对象可以直接传给sqlcmd-insert使用。
为了避免subject数组顺序和列顺序不匹配的问题,取值时直接用subject项自带的col属性定位列,比直接用循环索引j更稳妥:

const resultRows = [];

for (let rowIdx = 0; rowIdx < obj.value.length; rowIdx++) {
  // 初始化当前行的空对象
  const currentRow = {};
  const currentRowData = obj.value[rowIdx];

  // 遍历字段定义自动赋值
  for (let fieldIdx = 0; fieldIdx < obj.subject.length; fieldIdx++) {
    const fieldConfig = obj.subject[fieldIdx];
    // 动态挂载属性:字段名作为键,对应列的值作为值
    currentRow[fieldConfig.field] = currentRowData[fieldConfig.col];
  }

  // 此处currentRow已组装完成,结构为 {Name: 'xxx', Age: xx, ...},可直接执行插入
  // 示例:await sqlcmd.insert('your_table', currentRow)
  resultRows.push(currentRow);
}
运行效果

以你给出的示例JSON为例,遍历第一行时生成的currentRow结构如下,完全匹配你手动硬编码赋值的效果,不需要提前声明任何字段变量:

{
  Name: "Sam",
  Age: 30,
  Country: "US",
  Gender: "Male",
  IsActive: "Y"
}

后续如果表结构增减字段,只需要修改JSON里的subject配置即可,不需要调整循环逻辑代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:48:17