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

从JSON取数赋值数组时遇Cannot set property 'ref' of undefined错误求助

解决“Cannot set property 'ref' of undefined”错误:正确转换JSON为对象/数组

嘿,我一眼就瞅到问题出在哪了!你这个报错是因为试图给一个还没定义的对象添加属性——你的items2初始是[[]],但循环里直接访问items2[keyScd][keyTrd]时,这个位置的元素还没被创建成对象,自然就会报错啦。另外,你代码里还有个多余操作:原JSON里的ref、prix这些字段本身就是字符串,根本不用JSON.stringify再去截引号,直接用就行!

先给你修正后的完整代码,我会逐步解释改进点:

var items2 = {}; // 初始化为空对象,更适配JSON的键值对结构
$.getJSON("results.json", function(data) {
  $.each(data, function(key, val) {
    if (key === "items") {
      // 先给items2创建items属性,对应原JSON的数组结构
      items2.items = [];
      $.each(val, function(keyScd, valScd) {
        // 提前创建子数组,避免访问未定义元素
        var subItemArray = [];
        $.each(valScd, function(keyTrd, valTrd) {
          // 直接提取需要的字段,无需冗余的JSON转换
          var targetObj = {
            ref: valTrd.ref,
            prix: valTrd.prix,
            taille: valTrd.taille
          };
          subItemArray.push(targetObj);
        });
        items2.items.push(subItemArray);
      });
    } else {
      // 非items的属性直接赋值给对象,比如buildNumber
      items2[key] = val;
    }
  });
});

关键改进点:

  • 初始化结构合理:把items2初始化为空对象,既能存储buildNumber这类键值对,也能方便创建items数组存储嵌套数据
  • 提前创建嵌套元素:循环子数组时先创建空数组,再把整理好的对象push进去,彻底避免访问未定义元素的问题
  • 移除冗余操作:直接使用valTrd.ref这类原始值,原JSON里的字段本来就是字符串,JSON.stringify完全是多此一举
  • 结构更直观:处理后的items2和原JSON结构对应,后续使用起来更顺手

最终效果验证:

处理完成后,items2的结构会和你预期一致:

{
  "items": [
    [
      { "ref": "cpe-zfmmpx23", "prix": "300", "taille": "standard" },
      { "ref": "cpe-zfmmpx23", "prix": "400", "taille": "0.5mH,2mW" }
    ]
  ],
  "buildNumber": "fa36b5153f33240a111e6dc336a70"
}

再也不会出现undefined的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:18