Resumen técnico sobre la agrupación y conteo de datos JSON usando JSONata en una página web

En este artículo, abordaremos el desafío de agrupar y contar datos en formato JSON usando JSONata. Se presentará un ejemplo de datos JSON, se expondrán las dificultades encontradas y se propondrán soluciones efectivas.

Datos JSON de ejemplo

Los datos JSON que se utilizarán son los siguientes:

var mydata = [
  {"OWNED": "A", "DOSSIER": "Private", "DIP_ID": 8619},
  {"OWNED": "B", "DOSSIER": "Public",  "DIP_ID": 17},
  {"OWNED": "C", "DOSSIER": "Private", "DIP_ID": 27635},
  {"OWNED": "A", "DOSSIER": "Public",  "DIP_ID": 111},   
  {"OWNED": "B", "DOSSIER": "Public",  "DIP_ID": 110}
];

El objetivo es agrupar por los campos OWNED y DOSSIER, y contar el campo DIP_ID para cada grupo.

Solución Propuesta

  1. Consulta para la Agrupación y Conteo:

    Para obtener el resultado deseado, donde se muestra la cantidad de DIP_ID por cada grupo de OWNED y DOSSIER, se puede utilizar la siguiente expresión en JSONata:

    $reduce(mydata, function($acc, $item) {
       $merge([$acc, { 
           $item: { 
               "OWNED": $item.OWNED, 
               "DOSSIER": $item.DOSSIER, 
               "COUNT": $count($acc[$item.OWNED & $item.DOSSIER].DIP_ID) + 1 
           }
       }])
    }, {})

    Sin embargo, es importante recordar que la sintaxis y la estructura deben ser correctas para evitar errores al ejecutar la consulta.

  2. Implementación en JavaScript:

    Aquí hay un ejemplo de cómo implementar esta consulta en un archivo JavaScript:

    const jsonata = require('jsonata'); // Asegúrate de haber instalado la librería jsonata
    
    const expr = `$reduce(mydata, function($acc, $item) {
       $merge([$acc, { 
           $item: { 
               "OWNED": $item.OWNED,
               "DOSSIER": $item.DOSSIER, 
               "COUNT": $count($acc[$item.OWNED & $item.DOSSIER].DIP_ID) + 1 
           }
       }])
    }, {})`;
    
    let result = jsonata(expr).evaluate(mydata);
    console.log(result);

Actualización de Implementación

Si se requiere agrupar solo por un campo, como DOSSIER, se puede usar la siguiente expresión:

$reduce(DOSSIER, function($acc, $item) {
   $merge([$acc, { 
       "name": $item, 
       "count": $count(DOSSIER[$=$item]) 
   }])
}, [])

Esto proporcionará un resultado agrupado solo por el campo DOSSIER.

Consideraciones Finales

Al implementar JSONata en JavaScript, es crucial prestar atención a la sintaxis y la lógica de la variable expr. Es posible que se necesiten ajustes y pruebas adicionales para optimizar la consulta y evitar errores.

La integración de JSONata en aplicaciones JavaScript puede ser potente para manipular y transformar datos JSON de manera efectiva, utilizando expresiones concisas y legibles.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *