我有以下js:
var text = '{"firstName" : "abc", "lastName" : "def", "age" : 25}';
obj = JSON.parse(text).firstName;
console.log(obj);
这将按预期打印与firstName对应的值。然而,我想要做的是,我想存储要在变量中获取的键,并将其与JSON.parse()语句一起使用。像这样:
var text = '{"firstName" : "abc", "lastName" : "def", "age" : 25}';
var filter = 'firstName';
obj = JSON.parse(text).filter;
console.log(filter)
console.log(obj);
此代码将'undefined'打印到控制台上。我做错了什么?
答案 0 :(得分:3)
尝试使用存储在变量中的键访问值时,需要使用方括号表示法。
obj.key
相当于obj['key']
,但var x = 'key'; obj.x
不等于obj.key
。
打开您的控制台并运行此代码段
var text = '{"firstName" : "abc", "lastName" : "def", "age" : 25}';
var filter = 'firstName';
obj = JSON.parse(text)[filter];
console.log(filter);
console.log(obj);
一个简单的例子
var obj = { a: 'A' },
filter = 'a';
console.log( obj.a ); // outputs 'A'
console.log( obj['a'] ); // outputs 'A'
console.log( obj[filter] ); // outputs 'A'
console.log( obj.filter ); // outputs undefined, obj does not have a 'filter' property
答案 1 :(得分:3)
变化:
obj = JSON.parse(text).filter;
到
obj = JSON.parse(text)[filter];
有两种访问属性的方法:点表示法和括号表示法。
var test = object.property; //(dot notation)
var test = object[property_name]; //(bracket notation)
您面临的问题是您正在尝试访问对象上名为“filter”的属性,该属性不存在且因此未定义。
答案 2 :(得分:1)
这是尝试从已解析的JSON中访问名为filter
的属性,该属性不存在,因此undefined
。
相反,您需要JSON.parse(text)[filter]