繁体   English   中英

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

[英]Apply filter to JSON.parse() dynamically

我有以下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);

此代码将“未定义”打印到控制台上。 我究竟做错了什么?

尝试使用存储在变量中的键访问值时,需要使用方括号表示法。

obj.key等效于obj['key'] ,但var x = 'key'; obj.x 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

更改:

obj = JSON.parse(text).filter;

obj = JSON.parse(text)[filter];

有两种访问属性的方式:点表示法和括号表示法。

var test = object.property;  //(dot notation)
var test = object[property_name]; //(bracket notation)

您面临的问题是,您正在尝试访问对象上名为“过滤器”的属性,该属性不存在,因此未定义。

这试图从已解析的JSON访问名为filter的属性,该属性不存在,因此undefined

相反,您需要JSON.parse(text)[filter]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM