JSON Stringify / Unstringify

Escapa un objeto JSON en una cadena de texto entre comillas de una sola línea para incrustarla en código, o revierte una cadena JSON escapada a JSON legible.

1.018 visitas

Cómo Funciona

Stringify toma JSON real y lo escapa en un literal de cadena de una sola línea, con comillas escapadas — la forma que necesitas al incrustar JSON dentro de otro campo JSON, un valor de configuración o una constante de cadena en el código fuente. Internamente esto es exactamente lo que hace JSON.stringify() de JavaScript: recorre el valor, entrecomilla las cadenas, escapa los caracteres de control y las comillas incrustadas, y serializa objetos y arreglos como texto. Unstringify hace lo contrario: pega una cadena JSON escapada (con \" y \n) y obtén de vuelta un JSON limpio, legible y con sangría, equivalente a llamar a JSON.parse() sobre ella e imprimir el resultado con formato.

Ejemplo concreto: el objeto {"name":"Ada","tags":["a","b"]} se convierte en el literal "{\"name\":\"Ada\",\"tags\":[\"a\",\"b\"]}" — a cada comilla doble interna se le antepone una barra invertida para que todo pueda vivir dentro de un único par de comillas externas. Esto es exactamente lo que ocurre cuando una API envuelve un payload JSON como cadena dentro de otra respuesta JSON (el cuerpo de un webhook, una línea de log, una columna de base de datos de tipo texto), o cuando un valor JSON tiene que colocarse dentro de un archivo YAML, una variable de entorno o una constante de cadena en el código fuente sin romper la sintaxis circundante. Unstringify hace lo contrario: pega ese bloque escapado y recupera el original, con sangría y legible.

Vale la pena conocer algunos comportamientos de JSON.stringify() aunque nunca uses esta herramienta exacta: los valores undefined y las funciones se omiten silenciosamente de las propiedades de un objeto (una clave que contiene undefined simplemente desaparece), pero esos mismos valores dentro de un arreglo se convierten en null en lugar de eliminarse, ya que los arreglos deben mantener intactas su longitud y las posiciones de sus índices. Los objetos Date no se serializan como objetos — se convierten mediante su método toJSON() en una cadena ISO 8601 como "2024-01-15T10:30:00.000Z". Y un valor que contiene una referencia circular — un objeto que (directa o indirectamente, a través de una cadena de propiedades) se refiere a sí mismo — no se puede convertir en cadena en absoluto: el JSON.stringify() real lanza un TypeError: Converting circular structure to JSON, porque no existe una cadena finita que pueda representar una estructura infinitamente anidada.

Lo Que Deberías Saber

Convertir a cadena es una operación con pérdida en un sentido concreto: todo lo que se descarta silenciosamente (funciones, propiedades undefined, claves Symbol) no se puede recuperar después al revertir el proceso — el ciclo completo solo conserva lo que el JSON válido puede representar en primer lugar, es decir, cadenas, números, booleanos, null, objetos planos y arreglos. En el código real, JSON.stringify() también acepta dos argumentos adicionales más allá del propio valor: un replacer (una función o un arreglo de nombres de clave que controla exactamente qué propiedades se incluyen, o cómo se transforman sus valores antes de serializarlos), y un parámetro space (un número o cadena que convierte la salida compacta de una sola línea en un JSON con sangría, legible para humanos — esta es precisamente la diferencia entre una respuesta de API minificada y la versión con formato que te muestra un depurador).

El JSON codificado dos veces es una fuente habitual de confusión: si un valor parece una cadena JSON pero su primer carácter es una comilla y está lleno de comillas internas escapadas con barra invertida, probablemente se convirtió a cadena dos veces — una vez por la aplicación, y otra vez por una capa que no se dio cuenta de que el payload ya era una cadena JSON. Pasarlo por unstringify una vez resuelve la capa externa; si el resultado todavía parece escapado, vuelve a ejecutarlo.

Preguntas Frecuentes

¿Cuál es la diferencia con JSON.stringify en código?

La misma operación, solo que como herramienta interactiva: pega JSON real y obtén la forma de cadena escapada que de otro modo obtendrías escribiendo JSON.stringify(obj) — útil cuando no tienes una consola a mano.

¿Por qué necesitaría hacer unstringify de un JSON?

Las API y los logs a veces anidan una cadena JSON dentro de un campo JSON (JSON codificado dos veces) — unstringify convierte esa cadena interna escapada de vuelta en JSON legible y analizable.

¿Por qué desapareció una propiedad después de convertir a cadena?

JSON.stringify() omite silenciosamente las propiedades de un objeto cuyo valor es undefined o una función — ninguno de los dos tiene representación en JSON, así que la clave se elimina por completo en lugar de serializarse como null. Ese mismo valor undefined dentro de un arreglo se convierte en null en vez de desaparecer, ya que los arreglos deben conservar su longitud y el orden de sus índices.

¿Por qué obtengo un error de "circular structure"?

Si un objeto se referencia a sí mismo, directa o indirectamente a través de una cadena de otros objetos, JSON.stringify() no puede producir una cadena finita para él y lanza un TypeError. Esto es habitual al serializar objetos que guardan una referencia de vuelta a su padre (un nodo hijo que apunta de nuevo a su árbol, un elemento del DOM, una instancia de clase con un campo "self") — la solución es eliminar o sustituir la propiedad circular antes de serializar, a menudo con una función replacer.

¿Se suben mis datos a algún sitio?

No — ambas direcciones se ejecutan localmente en tu navegador.

Comentarios

Aún no hay comentarios — ¡sé el primero en escribir uno!

Herramientas Similares