2013-07-30 2 views
0

Рассмотрим JSON как это:Как искать и выбрать объект в JSON

[{ 
    "type": "person", 
    "name": "Mike", 
    "age": "29" 
}, 
{ 
    "type": "person", 
    "name": "Afshin", 
    "age": "21" 
}, 
{ 
    "type": "something_else", 
    "where": "NY" 
}] 

Я хочу, чтобы искать в значении JSON с помощью ключа (например, type='person'), а затем выбрать весь объект согласованного пункта в JSON. Например, когда я искать type='person' Я ожидаю, что это значение:

[{ 
    "type": "person", 
    "name": "Mike", 
    "age": "29" 
}, 
{ 
    "type": "person", 
    "name": "Afshin", 
    "age": "21" 
}] 

Потому что это действительно большое значение JSON, я не хочу, чтобы сделать полный перебор по всем узлам, так что я думаю, что единственный путь использует регулярные выражения, но я не знаю, как я могу написать Regex, чтобы соответствовать чему-то вроде выше.

Я использую NodeJs для применения.

+0

Это не JSON. Протестируйте его с помощью http://jsonlint.com/ – Quentin

+0

@Quentin Отредактировано. –

ответ

2

underscore.js#where Использование:

var results = _(yourObject).where({ type: 'person' }) 

Если набор данных очень очень большой [например, 10k или около того], рассмотрите возможность фильтрации/разбиения страниц на сервер.

+0

Спасибо, кажется хорошим решением, но что, если у нас есть вложенный объект? –

+0

@AfshinMehrabani, если вы ожидаете произвольного уровня вложенности, вам нужна более богатая структура данных, чем простой хеш-файл. [ORM] (https://github.com/dresende/node-orm2). – moonwave99

-2

Использование

$.grep(jsonarrayobj,function(n, i){ 
    if(n.type==="person") 
{} 
}) 
0

Если требование состоит в том, чтобы сканировать несколько раз через коллекцию, могут потребоваться следующие затраты времени на строительство.

Использование хэширования на основе значений типа. Преобразование текущей структуры данных в хэш-карту.

var hashMap = {

};

hashMap ['person'] = [{}, {}];

Надеюсь, это вам поможет.

1

Plain JavaScript:

var results = dataset.filter(function(p) { 
    if(p.type == 'person') 
    return true; 
}); 
+0

ТипError: Объект # не имеет метода 'filter' –

+0

@AfshinMehrabani http://jsfiddle.net/bYdUd/ – f0x

+0

Вы уверены, что он доступен в NodeJs? –

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