Ir al contenido principal
CuteJSON
↑↓ Navegar Enter Seleccionar Esc Cerrar

Casos de uso comunes de JSON: APIs, archivos de configuracion y almacenamiento de datos

Publicado 4 min de lectura Por Akash Kinkar Pandey

JSON aparece en suficientes roles diferentes que vale la pena separarlos: el formato es el mismo en todas partes, pero lo que cada caso de uso realmente necesita de el difiere, y confundir uno con otro es una fuente comun de decisiones incomodas (agregar comentarios a un payload de API generado por maquina, o esperar que un pipeline de registro NDJSON se parse como un solo documento JSON).

Payloads de API REST

El caso de uso mas comun por volumen. Un cuerpo de solicitud y un cuerpo de respuesta son cada uno un documento JSON, Content-Type: application/json, generado por un lado y consumido por el otro sin ningun humano leyendolo en el medio. Nada aqui necesita comentarios o conveniencia de edicion manual; lo que necesita es una gramatica sin ambiguedad que todos los lenguajes parseen de la misma manera, que es la fortaleza real de JSON. Un payload de REST tambien es la forma para la que existe el Validador de JSON Schema: verificar una respuesta contra el contrato que la API deberia cumplir, y ver exactamente que campo lo viola y por que, antes de que ese bug llegue al codigo de produccion que asume que el campo esta ahi.

Configuracion de la aplicacion

package.json, tsconfig.json, composer.json, y docenas de configuraciones de herramientas mas. Este es el caso de uso donde la falta de comentarios de JSON realmente cuesta algo: una configuracion sin explicacion a su lado, porque el formato no tiene donde poner una. Algunas herramientas solucionan esto con una clave // comment que nadie lee programaticamente, otras cambian a YAML o un superconjunto de JSON (JSON5, JSONC) que agrega comentarios de nuevo. Ver JSON vs YAML para el compromiso completo; la version corta es que los archivos de configuracion editados a menudo se benefician de los comentarios de YAML, mientras que la configuracion generada y consumida completamente por herramientas esta bien como JSON plano.

NoSQL y bases de datos de documentos

MongoDB almacena documentos como BSON, un formato binario que es un superconjunto del modelo de datos de JSON, y devuelve JSON (o una sintaxis de shell similar a JSON) cuando lo consultas. CouchDB y la mayoria de los almacenes de documentos aceptan y devuelven JSON directamente. El atractivo aqui es estructural: toda la propuesta de una base de datos de documentos es almacenar datos aproximadamente en la forma en que tu aplicacion ya los usa, en lugar de normalizarlos en filas y claves foraneas primero, y el modelo de objetos y arreglos de JSON es lo suficientemente cercano a los tipos nativos de la mayoria de los lenguajes que la traduccion es casi gratis.

Lineas de registro y datos en streaming: NDJSON

Un solo documento JSON no se transmite bien: un parser generalmente necesita todo antes de poder producir un valor, ya que un documento solo es valido una vez que llega su llave de cierre final. Newline Delimited JSON (NDJSON) resuelve esto haciendo que cada linea sea su propio valor JSON completo e independiente, para que un pipeline de registro, un topico de Kafka, o un export grande pueda procesarse linea por linea sin mantener todo el archivo en memoria. El Convertidor JSON a NDJSON convierte un arreglo JSON en este formato de un registro por linea y viceversa, con recuperacion para un stream que tiene una linea malformada en lugar de fallar todo el archivo por un solo registro malo.

Almacenamiento del navegador

localStorage y sessionStorage solo almacenan cadenas; cualquier cosa estructurada se ingresa como JSON.stringify(value) y sale como JSON.parse(stored). Este es tambien donde el problema de precision de numeros que Tipos de Datos JSON Explicados cubre se convierte en un bug real en lugar de una curiosidad: hacer round-trip de un ID de entero grande a traves de localStorage via el propio JSON.parse del navegador puede cambiar silenciosamente el valor, que es exactamente el modo de fallo para el que las herramientas de este sitio estan construidas para evitar y reportar en lugar de reproducir.

Probando con tus propios datos

Cada herramienta mencionada anteriormente se ejecuta completamente en tu navegador: nada que pegues en el Formateador JSON, el convertidor NDJSON, o el Validador de Schema se sube a ningun lugar, lo cual importa mas para exactamente el tipo de respuestas de API reales y archivos de configuracion de los que trata esta pagina.

Volver a todas las entradas