如何在Google Fonts的JSON数组中引用数字命名的files字段?
问题:如何引用JSON中数字键名的属性
我正在处理一个Google Fonts的JSON数组,字体结构按family->files->filename层级组织。部分filename以数字形式作为键名,例如以下示例中files下的"100"字段:
"family": "Roboto", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v30", "lastModified": "2022-09-22", "files": { "100": "http://fonts.gstatic.com/s/roboto/v30/KFOkCnqEu92Fr1MmgWxPKTM1K9nz.ttf", "regular": "http://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Me5WZLCzYlKw.ttf" }
遍历该JSON数组时,fontitem.files.regular可以正常调用,但数字键名无法通过点语法直接访问,尝试fontitem.files.$100引用"100"字段失败,相关代码如下:
$.getJSON('https://www.googleapis.com/webfonts/v1/webfonts?key=mykey', function(response) { var items = response.items; items.forEach(function(fontitem){ if (fontitem.family == "Roboto") { alert(fontitem.files.$100); // 无效 alert(fontitem.files.regular); // 有效 return; } }); });
解决方案:使用方括号语法引用数字键名
在JavaScript中,当对象的属性名是数字、包含特殊字符或不符合标识符命名规则时,不能使用点语法访问,必须改用方括号语法,且键名需以字符串形式传入(用引号包裹)。
修改后的代码示例:
$.getJSON('https://www.googleapis.com/webfonts/v1/webfonts?key=mykey', function(response) { var items = response.items; items.forEach(function(fontitem){ if (fontitem.family == "Roboto") { alert(fontitem.files["100"]); // 正确引用数字键名 alert(fontitem.files.regular); // 点语法仍可用于常规键名 return; } }); });
补充说明:
- 方括号语法适用于所有类型的键名,包括带空格、特殊符号的非标准标识符键名
- 即使键名在JSON中是数字类型,访问时也要用字符串形式传入方括号
内容的提问来源于stack exchange,提问作者scarface
相关产品推荐
相关产品推荐

