Как фильтровать данные JSON в JavaScript или jQuery?
Как фильтровать данные JSON с помощью Javascript или jQuery?
Это мои данные JSON:
[{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}]
JavaScript:
obj1 = JSON.parse(jsondata);
теперь мне нужны только данные имени и сайта, которые содержат веб-сайт, равный "yahoo"
Ответы
Ответ 1
Ваш json недействителен:
![enter image description here]()
вот как вы должны это сделать: (для поиска google)
$([
{"name":"Lenovo Thinkpad 41A4298","website":"google222"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"}
])
.filter(function (i,n){
return n.website==='google';
});
Лучшее решение: (Salman's)
$.grep( [{"name":"Lenovo Thinkpad 41A4298","website":"google"},{"name":"Lenovo Thinkpad 41A2222","website":"google"}], function( n, i ) {
return n.website==='google';
});
http://jsbin.com/yakubixi/4/edit
Ответ 2
Попробуйте этот способ, вы можете даже фильтровать другим ключом
Данные:
var my_data = [{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}];
использование:
//We do that to ensure to get a correct JSON
var my_json = JSON.stringify(my_data)
//We can use {'name': 'Lenovo Thinkpad 41A429ff8'} as criteria too
var filtered_json = find_in_object(JSON.parse(my_json), {website: 'yahoo'});
функция фильтрации
function find_in_object(my_object, my_criteria){
return my_object.filter(function(obj) {
return Object.keys(my_criteria).every(function(c) {
return obj[c] == my_criteria[c];
});
});
}
Ответ 3
Не нужно jQuery, если вы не нацеливаете старые браузеры и не хотите использовать прокладки.
var yahooOnly = JSON.parse(jsondata).filter(function (entry) {
return entry.website === 'yahoo';
});
В ES2015:
const yahooOnly = JSON.parse(jsondata).filter(({website}) => website === 'yahoo');
Ответ 4
Вы можете использовать jQuery каждую функцию, как описано ниже:
Определите свои данные:
var jsonStr = '[{"name":"Lenovo Thinkpad 41A4298,"website":"google"},{"name":"Lenovo Thinkpad 41A2222,"website":"google"},{"name":"Lenovo Thinkpad 41Awww33,"website":"yahoo"},{"name":"Lenovo Thinkpad 41A424448,"website":"google"},{"name":"Lenovo Thinkpad 41A429rr8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ff8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ss8,"website":"rediff"},{"name":"Lenovo Thinkpad 41A429sg8,"website":"yahoo"}]';
Разбить строку JSON на объект JSON:
var json = JSON.parse(jsonStr);
Итерация и фильтрация:
$.each(JSON.parse(json), function (idx, obj) {
if (obj.website == 'yahoo') {
// do whatever you want
}
});
Ответ 5
Я знаю, что вопрос явно говорит JS или jQuery, но в любом случае использует
lodash всегда находится на столе для других поисковиков, я полагаю.
Из источника docs:
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.filter(users, function(o) { return !o.active; });
// => objects for ['fred']
// The `_.matches` iteratee shorthand.
_.filter(users, { 'age': 36, 'active': true });
// => objects for ['barney']
// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']
// The `_.property` iteratee shorthand.
_.filter(users, 'active');
// => objects for ['barney']
Таким образом, решение для исходного вопроса будет всего одним слоем:
var result = _.filter(data, ['website', 'yahoo']);
Ответ 6
Он выполняет итерацию через объекты json и ищет каждое значение, о котором вас беспокоит, "веб-сайт", и если он равен "yahoo", вы можете вернуть это значение или сделать то, что вам нравится. Сейчас он просто записывает этот элемент в консоль.
jsonObj.forEach(function (element, index) {
if(element['website'] === 'yahoo'){
console.log('found', element)
}
})
Ответ 7
Значения могут быть получены во время разбора:
var yahoo = [], j = `[{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}]`
var data = JSON.parse(j, function(key, value) {
if ( value.website === "yahoo" ) yahoo.push(value);
return value; })
console.log( yahoo )