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

Node.js使用变量加方括号语法访问JSON属性返回undefined如何解决

问题根因

你的JSON文件中hangout-room属性名的开头包含了不可见的零宽空格(Unicode U+200B),肉眼观察控制台打印的属性名和channel.name输出完全一致,但两个字符串实际字节长度不同,因此方括号属性访问时无法匹配到对应属性,返回undefined。

验证方法

运行以下代码即可确认两个字符串的差异:

// 打印JSON解析后第一个属性的长度和首字符编码
const jsonKey = Object.keys(vc_channels)[0];
console.log(jsonKey.length, jsonKey.charCodeAt(0)); 
// 打印channel.name的长度和首字符编码
console.log(channel.name.length, channel.name.charCodeAt(0));
// 直接对比两个字符串是否相等
console.log(jsonKey === channel.name);

正常无零宽空格的hangout-room长度为11,首字符编码为104(对应小写字母h),如果JSON的key首字符编码为8203,就证明存在零宽空格。

解决方案
  • 方案一(推荐):直接修改vc_channels.json文件,删除属性名开头的隐藏不可见字符,也可以直接删除整行属性重新手动输入,避免残留隐藏字符。
  • 方案二(适配脏数据):如果无法修改源JSON文件,可以在解析后统一清洗属性名的不可见字符再使用:
const vc_channels = JSON.parse(fileContent);
// 清洗所有属性名中的零宽空格
const cleanedChannels = Object.fromEntries(
  Object.entries(vc_channels).map(([key, value]) => [key.replace(/\u200B/g, ''), value])
);
// 使用清洗后的对象访问属性
item.topic = cleanedChannels[channel.name];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:27:05