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

Customer Lifetime Value: la fórmula clásica que todo analista debería dominar

El Customer Lifetime Value (CLV) es, probablemente, la métrica más importante que puede calcular una…

2 días ago

Analytics Lane lanza la versión 1.4 del laboratorio con nuevas herramientas de conversión y modelos avanzados de CLV

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.4, que…

6 días ago

Lanzamos el video de ScoreFlow: crea scorecards de crédito de forma ágil y sin IT

En Analytics Lane seguimos apostando por desarrollar herramientas que simplifiquen el trabajo de analistas y…

1 semana ago

Data Leakage en Credit Scoring: El Error que Invalida tu Modelo

Imagina que construyes un scorecard con un Gini de 0,85. Un resultado extraordinario, muy por…

1 semana ago

This website uses cookies.