Ejemplo de datos JSON:
{ "assignments": [{ "date": "2022-04-01", "lName": "lastname", "uId": "12345", "uCode": "LName1", "fName": "FName1 ", "aName": "AsignmentName1", "aId": "998" }] }
Me gustaría filtrar los siguientes datos para obtener el contenido de un elemento específico en función de la búsqueda de un nombre de asignación.
Por ejemplo, en términos similares a SQL
Select * FROM assignments WHERE `aName` = 'AssignmentName1'
Estoy seguro de que esto es simple, pero tengo problemas con los métodos para lograrlo.
Gracias
Primero tienes que analizar la cadena JSON:
const parsedJSON = JSON.parse(jsonString);
El objeto devuelto contiene todos los datos de su cadena JSON. Para acceder a la matriz de asignaciones, puede usar la notación de puntos.
const assignments = parsedJSON.assignments;
Si no necesita admitir navegadores antiguos, ES6 tiene una función útil para encontrar el valor en un objeto. Use la función "buscar" y pase una función que devuelva verdadero para el elemento que está buscando:
const selectedAssignment = assignments.find( (assignment)=> { return assignment.aName=="AssignmentName2"; });
Si no quiere usar ES6, puede usar un bucle for.
var assignments = JSON.parse(jsonString).assignments; function getAssignmentWithName(name) { for (var i = 0; i < assignments.length; i++) { if (assignments[i].aName == name) { return assignments[i]; } } return false; } var selectedAssignment = getAssignmentWithName("AssignmentName1");
Soy nuevo aquí, pero si tiene acceso a JavaScript moderno, haría algo como:
const data = JSON.parse('{"assignments":[{"date":"2022-04-01","lName":"lastname","uId":"12345","uCode":"LName1","fName":"FName1 ","aName":"AsignmentName1","aId":"998"}]}'; const yourMatch = data.assignments.find(c => c.aName === 'AssignmentName1');
data.assignments
es una matriz, puede llamar a la función find()
en ella. Esta función toma una función de 'búsqueda'/lambda como argumento.c => c.aName === 'AssignmentName1'
, que es más corta y más fácil de leer que una definición de función normal. (Puedes llamar a c
como quieras, es más limpio de esta manera).find()
con filter()
, si acepta varios resultados y no solo el primero.