JavaScript

Reducir el número de dígitos en JSON.stringify()

Posiblemente uno de los métodos más sencillos y eficaces para el intercambio de información compleja entre diferentes sistemas sean las cadenas de texto JSON. Siendo uno de los motivos por el que son tan populares en la actualidad. Existiendo herramientas para trabajar con ellas en Python, Julia y Matlab. Tanto en JavaScript como en TypeScript la función para la creación de cadenas de texto JSON a partir de cualquier objeto es JSON.stringify(). Una función que escribe en la cadena de texto todos los dígitos de los valores numéricos. Algo que es positivo en la mayoría de los casos, ya que conserva íntegramente la precisión original. Aunque, cuando el objeto contiene miles o decenas de miles de valores, el tamaño de la cadena de texto puede crecer considerablemente y crear un problema. Si no es necesario mantener la presión, puede ser interesante reducir el número de dígitos en JSON.stringify(), para reducir así el tamaño de las cadenas de texto generarlas.

La función JSON.stringify()

Aunque en la mayoría de los casos únicamente se usa la primera entrada de la función JSON.stringify(), la del objeto que se desea transformar, esta cuenta con dos más opcionales que pueden ser de utilidad en casos como el que se plantea. Siendo el segundo una función que se puede indicar para reemplazar el contenido de los diferentes valores. Función que debe tener dos parámetros, el primero la clave del valor y el segundo el valor.

Función de reemplazo para JSON.stringify()

Sabiendo que la función JSON.stringify() admite una función de reemplazo como segundo parámetro se puede crear una que reduzca la precisión de los valores numéricos. Para lo que se puede usar el método toFixed(), método que además solo existe en los valores numéricos. Así se puede escribir la siguiente función de reemplazo.

(_, val) => val.toFixed ? Number(val.toFixed(2)) : val;

Una función que solamente necesita el segundo parámetro, el valor. En esta función, en el caso de que el valor contenga el método toFixed(), esto es, es un valor numérico, se transforma el valor en uno con solamente dos decimales, en el caso contrario se mantiene el valor original. Es importante usar convertir el resultado de toFixed() otra vez en número mediante Number(), ya que devuelve una cadena de texto.

Ejemplo de uso

Ahora se puede comprobar los resultados al usar esta función en valores numéricos, vectores y objetos. Por ejemplo, si convertimos los siguientes objetos sin la función de reemplazo se obtienen una cadena de texto donde los valores numéricos tienen 16 decimales.

const data = Math.PI;
const array = [Math.PI, Math.E];
const obj = {
  pi: Math.PI,
  e: Math.E
};

console.log(JSON.stringify(data));
console.log(JSON.stringify(array));
console.log(JSON.stringify(obj));
3.141592653589793
[3.141592653589793,2.718281828459045,"11"]
{"pi":3.141592653589793,"e":2.718281828459045}

Ahora, si se aplica la función descrita anteriormente se puede observar que solamente tendremos 2 dígitos. Lo que supone una considerable reducción de la longitud de las cadenas de texto.

const data = Math.PI;
const array = [Math.PI, Math.E];
const obj = {
  pi: Math.PI,
  e: Math.E
};

const precisionReplacer = (_, val) => val.toFixed ? Number(val.toFixed(2)) : val;

console.log(JSON.stringify(data, precisionReplacer));
console.log(JSON.stringify(array, precisionReplacer));
console.log(JSON.stringify(obj, precisionReplacer));
3.14
[3.14,2.72,"11"]
{"pi":3.14,"e":2.72}

Conclusiones

En esta ocasión se ha visto cómo se puede reducir el número de dígitos en JSON.stringify() mediante el uso de una función de reemplazo. Siendo un método que se puede usar en otras ocasiones para transformar las cadenas de texto JSON generadas con JavaScript.

Imagen de Bruno /Germany en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.