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
相关产品推荐
相关产品推荐

