2015-03-16 8 views
0

У меня есть следующие ЯШИ:Применить фильтр JSON.parse() динамически

var text = '{"firstName" : "abc", "lastName" : "def", "age" : 25}'; 
obj = JSON.parse(text).firstName; 
console.log(obj); 

Это печатает значение, соответствующее ключевому ПгвЬЫата, как и ожидались. Однако то, что я пытаюсь сделать, я хочу сохранить ключ, который будет выбран в переменной, и использовать его вместе с инструкцией 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

Изменение:

obj = JSON.parse(text).filter; 

в

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

Есть два способа доступа к свойствам: точечная нотация и кронштейн обозначения.

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

вопрос вы столкнулись в том, что вы пытаетесь получить доступ к свойству называется «фильтр» на Ваш объект, который не существует, и, следовательно, не определено.

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 
+0

Я ответил первым, но не проблема;) – blex

+0

@Anvith Blex сделал не получить там примерно за секунду до меня – Magrangs

+0

@Magrangs нечего беспокоиться о том, ваш ответ является совершенным и получил +1 все равно , – blex

1

Это попытка получить доступ к атрибуту filter из разобранного JSON, который не существует и, следовательно, undefined.

Вместо этого вы хотите JSON.parse(text)[filter]

Смежные вопросы