Comment filtrer les données JSON en utilisant Javascript ou jQuery?
Mes données 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);
Maintenant, je ne souhaite que le nom et les données du site Web qui contiennent un site Web est égal à "yahoo"
Votre json n'est pas valide:
Voici comment vous devriez le faire: (pour google find)
$([ {"name":"Lenovo Thinkpad 41A4298","website":"google222"}, {"name":"Lenovo Thinkpad 41A2222","website":"google"} ]) .filter(function (i,n){ return n.website==='google'; });
Meilleure solution: (Salman's)
$.grep( [{"name":"Lenovo Thinkpad 41A4298","website":"google"},{"name":"Lenovo Thinkpad 41A2222","website":"google"}], function( n, i ) { return n.website==='google'; });
Essayez cette façon, permettez-vous même de filtrer par une autre clé
Les données:
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"}];
usage:
//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'});
Fonction de filtrage
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]; }); }); }
Pas besoin de jQuery, sauf si vous ciblez les anciens navigateurs et ne souhaitez pas utiliser de cales.
var yahooOnly = JSON.parse(jsondata).filter(function (entry) { return entry.website === 'yahoo'; });
Dans ES2015:
const yahooOnly = JSON.parse(jsondata).filter(({website}) => website === 'yahoo');
Vous pouvez utiliser jQuery chaque fonction comme il est expliqué ci-dessous:
Définissez vos données:
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"}]';
Parse JSON string à l'objet JSON:
var json = JSON.parse(jsonStr);
Iterate et filtre:
$.each(JSON.parse(json), function (idx, obj) { if (obj.website == 'yahoo') { // do whatever you want } });
Je sais que la question dit explicitement JS ou jQuery, mais de toute façon, utiliser lodash est toujours sur la table pour les autres chercheurs, je suppose.
À partir des documents source:
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']
Donc, la solution pour la question initiale serait juste une doublure:
var result = _.filter(data, ['website', 'yahoo']);