我正在创建一个 Javascript / jQuery 应用程序。
我需要处理代表HashMap
的 JSON 响应,如下所示:
{
"accounts": {
"MediaFire": {
"provider": "MediaFire",
"usedStorage": "779680",
"totalStorage": "53687091200"
},
"4Sync": {
"provider": "4Sync",
"usedStorage": "620692",
"totalStorage": "16106127360"
}
}
}
我使用了一个pasing函数(我无法控制),它返回对象result
中解析的JSON响应。
当我尝试像这样访问4Sync
时:
var usedStorage = result.accounts.4Sync.usedStorage; //doesn't work
它不起作用,我认为是因为开头的 4 ...与其他对象相同的操作正常工作:
var usedStorage = result.accounts.MediaFire.usedStorage; //works
我知道result
对象包含对象4Sync
,但我无法访问它。以下是Chrome控制台的屏幕截图:
有解决方法吗?
答案 0 :(得分:7)
使用方括号:
var usedStorage = result.accounts["4Sync"].usedStorage;
属性标识符可以以数字开头,但具有.
字符的成员表达式只允许有效的变量标识符(因为其他任何内容都不明确)。为了解决这个问题,你可以使用方括号语法,它是等效的,但允许使用任何字符串。
如果您有兴趣,请点击the grammar:
MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression[
表达式]
MemberExpression.
IdentifierName
注意方括号可以包含任何表达式,但.
只能后跟IdentifierName(基本上,任何有效的标识符,加上ES5中的保留字)。