无法访问JSON子元素:含连字符键的对象访问方案咨询
解决带连字符的JSON键访问问题
嘿,这个坑我之前也踩过!其实不是不能访问带连字符(-)的键,只是你用的**点语法(.)**不支持这种键名而已——因为在JavaScript里,点语法要求键名是有效的标识符(不能包含连字符、空格,也不能以数字开头),解释器会把page.content-items当成page.content - items(减法运算),自然就报错了。
解决方案:方括号语法
对于带特殊字符的键名,改用方括号语法就能正常访问了,具体写法如下:
1. 访问content-items本身
// 错误写法(会被当成减法运算,直接报错) // page.content-items // 正确写法 page['content-items']
2. 访问嵌套的content数组
如果要进一步获取里面的内容列表,还可以链式组合方括号和点语法(只要后续键名是合法标识符):
// 两种写法都可行 page['content-items'].content // 或者全用方括号 page['content-items']['content']
完整示例
把你的JSON赋值给变量后,完整的访问代码可以是这样:
const movieData = { "page": { "title": "Romantic Comedy", "total-content-items" : "54", "page-num-requested" : "1", "page-size-requested" : "20", "page-size-returned" : "20", "content-items": { "content": [ { "name": "The Birds", "poster-image": "poster1.jpg" }, { "name": "Rear Window" } ] } } }; // 获取所有电影内容 const allMovies = movieData.page['content-items'].content; console.log(allMovies); // 输出包含两部电影的数组 // 获取第一部电影的海报地址 const firstMoviePoster = allMovies[0]['poster-image']; console.log(firstMoviePoster); // 输出"poster1.jpg"
总结
只要键名包含连字符、空格或者以数字开头这类不符合标识符规则的字符,都需要用['键名']的方式来访问,而不能用点语法。这个规则不仅适用于JSON对象,也适用于所有JavaScript对象的属性访问~
内容的提问来源于stack exchange,提问作者Alex Varghese
相关产品推荐
相关产品推荐

