Español

Herramientas de desarrollo · JSON formateador y validador

Válido JSON vs válido contra un esquema: dos significados de "válido"

· Antecedentes

json estándares validación

JSON válido frente a válido según un esquema: dos significados de "válido" ilustrados con tokens JSON y un límite de validación preciso
Ilustración de vector original de ToolAcre

Un validador que dice que su JSON es válido significa solo que analiza. Esta publicación explica los niveles de validez (sintaxis, estructura, semántica) y por qué el esquema JSON existe para todo más allá de la gramática.

Válido y aún rechazado

Una solicitud puede ser impecable JSON y aun así ser inaceptable para una API. `{"username":"nori","plan":"gold"}` tiene delimitadores equilibrados, nombres entrecomillados y valores legales, pero un servicio puede requerir un correo electrónico, rechazar el nombre del plan o prohibir la creación de una cuenta en el estado actual. El analizador y la aplicación responden preguntas diferentes, por lo que ambos resultados pueden ser correctos.

ToolAcre responde solo a la primera pregunta: ¿se puede analizar este texto como estricto JSON dentro de sus límites de entrada? No carga un esquema, no verifica las propiedades requeridas, no verifica formatos, no contacta una base de datos ni evalúa reglas comerciales. Cuando la herramienta diga Válido, léalo como "sintaxis JSON bien formada", no como aprobación del sistema que consumirá el valor.

Nivel uno: sintaxis bien formada

La validación de sintaxis verifica la gramática JSON: un valor de nivel superior, contenedores emparejados correctamente, nombres de objetos entrecomillados, comas y dos puntos válidos, cadenas legales, números legales y literales exactos. Rechaza `NaN` y `Infinity`, comentarios, comas finales y cadenas entre comillas simples. Acepta cualquier forma gramaticalmente válida, incluido un número solitario o un objeto con campos desconocidos.

La fuente con formato incorrecto tiene un punto de error textual, por lo que ToolAcre puede informar una línea y columna para el primer carácter imposible. La falta de una coma puede provocar que se informe la siguiente cita; una coma al final puede hacer que se informe el delimitador de cierre. La corrección de la sintaxis crea un valor analizable pero no establece que el valor tenga la forma o el significado esperado por otro programa.

Nivel dos: la forma

La validación de forma pregunta si el valor analizado coincide con un contrato declarado. Un esquema de usuario puede requerir `email`, restringir `age` a un número entero de al menos 18, limitar `tier` a `free` o `pro` y no permitir propiedades desconocidas. `{"email":false,"tier":"gold"}` es una sintaxis válida de JSON pero no cumple con esas reglas estructurales porque los tipos de valor y las opciones permitidas son incorrectas.

JSON El esquema es una forma de expresar tales restricciones, pero ToolAcre no lo ejecuta. Un validador de esquema generalmente informa una ruta de instancia como `/tier`, una palabra clave como `enum` y un mensaje explicativo en lugar de un símbolo de intercalación del analizador. Mantenga la versión del esquema y el contrato de API junto a la carga útil al diagnosticar este nivel; cambiar la puntuación no reparará un valor analizado correctamente con la forma incorrecta.

Nivel tres: significado

El significado depende de hechos y reglas más allá de la forma estática del documento. Un `accountId` puede tener el patrón de cadena correcto sin nombrar ninguna cuenta. Una fecha de inicio puede coincidir con un formato de estilo ISO y ser posterior a la fecha de finalización. Una cantidad puede ser positiva pero exceder el stock actual. Estas fallas requieren el contexto de la aplicación, el estado almacenado o las relaciones entre campos.

Algunas restricciones semánticas se pueden aproximar en un esquema, pero muchas pertenecen a la lógica del servicio donde están disponibles datos autorizados y estados de transacción. Las respuestas de error en este nivel deben identificar el campo o regla relevante sin pretender que el texto JSON tenga un formato incorrecto. ToolAcre no puede reproducir esas decisiones porque no conoce el contrato ni envía la entrada a la aplicación propietaria de la regla de negocio.

Ejemplo resuelto: una carga útil a través de tres comprobaciones

Comience con `{"sku":"A-19","quantity":3,"warehouse":"north"}`. ToolAcre lo acepta: todos los nombres y valores siguen la gramática JSON. Luego, un esquema puede requerir un objeto, un SKU de cadena no vacía, una cantidad entera positiva y uno de los códigos de almacén documentados. Supongamos que esta carga útil también supera esas restricciones. Ninguno de los controles ha confirmado que exista el SKU A-19 o que el norte tenga tres unidades.

El servicio de inventario realiza la tercera verificación con los registros actuales y puede rechazar la solicitud por no estar disponible. Cambiar la sangría no puede alterar ese resultado. Si `quantity` se escribiera como `03`, la sintaxis fallaría primero; si fuera `"3"`, el análisis pasaría pero la verificación del tipo de esquema fallaría; con el numérico `3`, solo queda la regla del ganado vivo. Por tanto, el mismo campo puede fallar en tres capas distintas por tres motivos distintos.

Dónde pertenece cada cheque

Ejecute la validación de sintaxis lo antes posible durante la edición, porque las comprobaciones posteriores no pueden operar de manera confiable en texto que no se analiza. Haga cumplir la forma declarada en cada límite de aplicación que no sea de confianza en lugar de asumir que un cliente ya lo hizo. Evalúe las invariantes comerciales en el componente que posee el estado requerido, especialmente cuando la respuesta puede cambiar entre solicitudes.

Las comprobaciones del lado del cliente mejoran la retroalimentación pero no reemplazan la aplicación del lado del servidor. Por el contrario, una respuesta del servidor que diga "JSON no válido" debe reservarse para errores de análisis en lugar de usarse para cada solicitud rechazada. Una separación clara produce diagnósticos útiles: línea y columna para la sintaxis, rutas de instancia para restricciones estructurales y códigos o mensajes específicos de dominio para conflictos semánticos. ToolAcre suministra sólo la primera categoría.

Lo que esto no cubre

Este formateador no crea ni evalúa JSON esquemas, no selecciona un borrador de esquema, resuelve referencias de esquemas, inserta valores predeterminados ni convierte cadenas en números. Tampoco conoce el documento OpenAPI de una API ni las convenciones de validación personalizadas. Proporcionar un esquema junto con la entrada no cambiaría el resultado de ToolAcre porque no hay ningún paso de procesamiento de esquema en esta herramienta.

La validación de sintaxis tampoco detecta nombres de objetos duplicados aquí; `JSON.parse` mantiene la última aparición antes de formatear. Tampoco garantiza precisión numérica, bytes canónicos, representación segura o autorización. Cada una de esas preocupaciones necesita su propio contrato e implementación. Evite comprimirlos en una única insignia verde de “válido”, porque al hacerlo se oculta qué evidencia se recopiló y qué preguntas nunca se hicieron.

Conclusión: 'válido' necesita un calificador

Calificar cada reclamo de validación. “Válido JSON” significa que el texto sigue la gramática. "Válido según este esquema" significa que el valor analizado satisface un contrato estructural con nombre. “Aceptado por el servicio” significa que las reglas de aplicación vigentes permiten la operación. Pasar una capa es necesario para la siguiente en muchos flujos de trabajo, pero nunca es evidencia de que todas las capas posteriores hayan pasado.

Utilice ToolAcre para formatear y verificar la sintaxis estricta, incluido el rechazo de literales que no son JSON, como `NaN` y `Infinity`. Luego use el esquema y la aplicación que realmente gobiernan la carga útil. Cuando una solicitud aún falla, lea el error en su propia capa en lugar de volver a formatear repetidamente el JSON correcto. La herramienta no tiene controles de esquema y ese límite explícito es más útil que una promesa de validez demasiado amplia.