[英]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.