动态地将过滤器应用于JSON.parse()

时间:2015-03-16 13:06:23

标签: javascript json

我有以下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'打印到控制台上。我做错了什么?

3 个答案:

答案 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]