2012-03-06 3 views
2

Это может быть вопрос о нобе, но мне интересно, есть ли способ выбрать объект json без необходимости цитировать пары значений ключа. Я сделал аналогичные вещи с e4x, но я не уверен, как это сделать синтаксически для js. НапримерВыберите объект json на основе пары значений ключа

var data = { "objects":[ 
       {"foo":"x","bar":"a"}, 
       {"foo":"y","bar":"b"} 
       ]} 

Так вместо того, чтобы цикл, каким-то образом объявить

var someObject = data.objects[where objects.foo == x] 
+0

Это не JSON, это объект буквального обозначения. –

+0

Вы ошиблись. JSON является подмножеством нотации Object Literal и на самом деле требует, чтобы идентификаторы в парах значений были только строками. – FlavorScape

ответ

3

Вы можете сделать это без вручную итерация по каналу передачи данных, но какой-то код должен перебрать объект в любом случае (так что не ожидайте молниеносной скорости на довольно больших объектах).

Там есть библиотека, что: jsonpath

+0

Ugh. Мне не нравится в зависимости от библиотек. Нет чистого пути, а? Думаю, я зацикливаюсь. – FlavorScape

+0

Тогда напишите это самостоятельно. Ничего особенного. Ах, вы можете взять 'findBy' отсюда: http://travian.kirilloid.ru/js/array.js – kirilloid

+0

см. JsonQ! https://github.com/s-yadav/jsonQ/ – FlavorScape

0

Этот вопрос был задан вопрос два года назад, до jsonQ. jsonQ позволяет нам писать код, чтобы находить братьев и сестер, пересекать деревья и т. д., не создавая пучков петель внутри петель. Хотя вопрос хотел найти его в родной JS, я думаю, что мой двухлетний вопрос сейчас немного наивен. Я действительно искал такую ​​библиотеку, как jsonQ, чтобы не писать кучу уродливых циклов (хотя я мог бы сам работать).

0

Вопрос старый, но может ли этот ответ помочь кому-то.

Чтобы выбрать элемент из списка, вы можете использовать JavaScript фильтр функции:

var data = { "objects":[ 
        {"foo":"x","bar":"a"}, 
        {"foo":"y","bar":"b"} 
       ]} 

var someobject = filterObject('x'); 

function filterObject(fooValue) { 
    return data.objects.filter(function(item) { 
     return item.foo == fooValue; 
    } 
} 
Смежные вопросы