Tengo una pregunta sobre la búsqueda de JSON para obtener información específica. Por ejemplo, tengo este archivo JSON:
{ "people": { "person": [ { "name": "Peter", "age": 43, "sex": "male" }, { "name": "Zara", "age": 65, "sex": "female" } ] } }Mi pregunta es, ¿cómo puedo encontrar a una persona en particular por su nombre y mostrar la edad de esa persona con jQuery? Por ejemplo, quiero buscar el JSON para una persona llamada Peter y cuando encuentro una coincidencia, quiero mostrar información adicional sobre esa coincidencia (sobre la persona llamada Peter en este caso), como la edad de la persona, por ejemplo.
var json = { "people": { "person": [{ "name": "Peter", "age": 43, "sex": "male"}, { "name": "Zara", "age": 65, "sex": "female"}] } }; $.each(json.people.person, function(i, v) { if (v.name == "Peter") { alert(v.age); return; } });Basado en esta respuesta , podrías usar algo como:
$(function() { var json = { "people": { "person": [{ "name": "Peter", "age": 43, "sex": "male"}, { "name": "Zara", "age": 65, "sex": "female"}] } }; $.each(json.people.person, function(i, v) { if (v.name.search(new RegExp(/peter/i)) != -1) { alert(v.age); return; } }); });Encontré que el ejemplo de jQuery.each() de ifaour es útil, pero agregaría que jQuery.each() se puede romper (es decir, detener) devolviendo falso en el punto donde encontró lo que está buscando:
$.each(json.people.person, function(i, v) { if (v.name == "Peter") { // found it... alert(v.age); return false; // stops the loop } });Puede usar Jsel: https://github.com/dragonworx/jsel (para una divulgación completa, soy el propietario de esta biblioteca).
Utiliza un motor XPath real y es altamente personalizable. Se ejecuta tanto en Node.js como en el navegador.
Dada su pregunta original, encontraría a las personas por nombre con:
// include or require jsel library (npm or browser) var dom = jsel({ "people": { "person": [{ "name": "Peter", "age": 43, "sex": "male"}, { "name": "Zara", "age": 65, "sex": "female"}] } }); var person = dom.select("//person/*[@name='Peter']"); person.age === 43; // trueSi siempre estuvo trabajando con el mismo esquema JSON, podría crear su propio esquema con jsel y poder usar expresiones más cortas como:
dom.select("//person[@name='Peter']")