Así que actualmente estoy consultando una gran lista de objetos Json (2000 para ser exactos). Dentro de la consulta o URI que estoy usando, extrae miles de objetos que comparten los mismos valores clave. ¿Cómo extraes todos los valores de una clave específica? Entonces, si quiero extraer todos los "id": valores y registrarlos, ¿cómo hago eso?
El otro problema que tengo es que el objeto obviamente no mantiene un orden específico y los valores de esas claves cambian constantemente, por lo que usar la notación de puntos para analizar una matriz realmente no funciona. Aquí está mi código de ejemplo.
function myFunction() { var res = UrlFetchApp.fetch("API QUERY") var content = res.getContentText(); var json = JSON.parse(content); var jobId = json["items"][0]["name"] var values = Object.keys(jobId).map(function (key) { return jobId[key]; }); Logger.log(values) };La respuesta se ve así:
{ "items": [ { "id": , "name": "My job name", "status": "open", "created": 153173990000, "finished": 153174000000, "tracking": "https://api/not-a-real-tracking-link", "group": 6417500000, "site": {}, "progress": 0, } ] }Y luego se repite 2000 veces una tras otra
{ "items": [ { "id": , "name": "My job name2", "status": "open", "created": 153173990000, "finished": 153174000000, "tracking": "https://api/not-a-real-tracking-link", "group": 6417500000, "site": {}, "progress": 0, } ] } { "items": [ { "id": , "name": "My job name3", "status": "open", "created": 153173990000, "finished": 153174000000, "tracking": "https://api/not-a-real-tracking-link", "group": 6417500000, "site": {}, "progress": 0, } ] }Entonces, la consulta en sí extrae 2000 objetos como este, necesito extraer los valores de la clave "nombre" de cada objeto y registrarlos.
Puede usar Array.reduce() para apilar valores en un nuevo objeto:
const json = [ {id: 123, value:"val a"}, {id: 124, value:"val b"}, {id: 125, value:"val c"}, {id: 123, value:"val d"}, {id: 125, value:"val e"}, {id: 223, value:"val f"}, {id: 123, value:"val g"}, {id: 123, value:"val h"}, {id: 123, value:"val i"}, {id: 223, value:"val j"}, {id: 223, value:"val k"}, ]; console.log( json.reduce( (newObj, data) => { const array = newObj[data.id] = newObj[data.id] || []; //get already existing array or create a new one array[array.length] = data.value; //append value to the end of the array return newObj; }, {} /* init newObj as empty object */ ));