Comment filtrer les données JSON en JavaScript ou jQuery?

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:

Entrez la description de l'image ici

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'; }); 

http://jsbin.com/yakubixi/4/edit

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']);