← Todos los artículos

Cómo validar JSON: sintaxis y validación de esquemas

Valida la sintaxis JSON con JSON.parse, json.loads de Python, jq o en tu navegador — y aprende a comprobar estructura y tipos con JSON Schema.

Validar JSON significa confirmar que una cadena es sintácticamente correcta (sigue la gramática JSON) y, opcionalmente, estructuralmente correcta (encaja con la forma que tu aplicación espera). Esta guía muestra cómo validar JSON en JavaScript, Python, en línea de comandos y en el navegador —— y explica la diferencia crucial entre validación de sintaxis y validación con esquema.

Dos tipos de validación JSON

Antes de validar cualquier cosa, decide qué pregunta estás haciendo realmente:

  • Validación de sintaxis —— "¿esto es JSON válido siquiera?" Comprueba comillas, comas, corchetes y tipos de valor contra la gramática JSON. JSON.parse() lo hace.
  • Validación con esquema —— "¿este JSON tiene los campos, tipos y restricciones correctos?" Comprueba que id sea entero, que email esté presente, etc. Necesita JSON Schema y un validador como Ajv.

La mayoría de búsquedas "validate JSON" se refieren a validación de sintaxis —— empezamos por ahí.

Cómo validar JSON en JavaScript

La comprobación de sintaxis más simple y fiable es intentar parsear y capturar el error. JSON.parse() lanza un SyntaxError ante cualquier entrada no válida:

function isValidJson(text) {
  try {
    JSON.parse(text);
    return true;
  } catch {
    return false;
  }
}

isValidJson('{"name":"Ada"}');  // true
isValidJson("{'name':'Ada'}");  // false —— comillas simples
isValidJson('{"a":1,}');        // false —— coma final

Si necesitas el motivo del fallo, captura el mensaje de error —— suele incluir la posición:

function validateJson(text) {
  try {
    return { valid: true, value: JSON.parse(text) };
  } catch (err) {
    return { valid: false, error: err.message };
  }
}

validateJson('{"a":1,}');
// { valid: false, error: "Expected double-quoted property name in JSON at position 7" }

No uses expresiones regulares para validar JSON. JSON es una gramática recursiva y no puede validarse correctamente con regex —— JSON.parse() es el validador canónico y ya viene integrado en todo runtime JavaScript.

Cómo validar JSON en Python

json.loads() de Python lanza json.JSONDecodeError ante entrada inválida con línea y columna exactas:

import json

def is_valid_json(text):
    try:
        json.loads(text)
        return True
    except json.JSONDecodeError as e:
        print(f"Invalid JSON: {e.msg} at line {e.lineno} column {e.colno}")
        return False

is_valid_json('{"name": "Ada"}')   # True
is_valid_json('{"name": "Ada",}')  # False —— coma final

Cómo validar un fichero JSON en la línea de comandos

Con jq

jq sale con código no-cero si la entrada no es JSON válido, ideal para scripts y CI:

# No imprime nada y sale 0 si es válido; imprime error y sale no-cero si no
jq empty data.json && echo "valid" || echo "invalid"

Con Python (sin instalar)

python3 -m json.tool data.json > /dev/null && echo "valid"

En un pipeline de CI

Valida todos los ficheros JSON del repo como paso pre-commit o CI para que la configuración malformada nunca llegue a producción:

# Falla el build si algún .json no es válido
find . -name '*.json' -not -path './node_modules/*' \
  -exec sh -c 'jq empty "$1" || exit 255' _ {} \;

Valida JSON en tu navegador

Para una comprobación rápida sin escribir código, pega tu JSON en el validador JSON de fixjson. Reporta la línea y posición exactas de cualquier error de sintaxis mientras escribes y todo se ejecuta localmente —— nada se envía al servidor, así que es seguro para payloads sensibles. Si el JSON está roto y prefieres repararlo en vez de solo marcarlo, JSON Fix auto-corrige los errores comunes.

Más allá de la sintaxis: validar estructura con JSON Schema

Un JSON sintácticamente válido aún puede ser incorrecto para tu aplicación —— un campo requerido ausente, una cadena donde esperabas un número, un valor fuera de rango. Para imponer estructura, describe la forma esperada con JSON Schema y valida con Ajv (JavaScript) o la librería jsonschema (Python):

import Ajv from 'ajv';

const ajv = new Ajv();
const validate = ajv.compile({
  type: 'object',
  required: ['id', 'email'],
  properties: {
    id:    { type: 'integer' },
    email: { type: 'string' },
  },
});

validate({ id: 42, email: 'a@b.com' }); // true
validate({ id: '42' });                 // false —— tipo equivocado, sin email
// validate.errors contiene los detalles

Validación con esquema en línea de comandos

Para comprobaciones de CI de JSON contra esquema, dos CLIs cubren casi todo:

# Python —— instala una vez y valida
pip install jsonschema
jsonschema --instance data.json schema.json && echo OK

# Node —— Ajv como CLI
npm i -g ajv-cli ajv-formats
ajv validate -c ajv-formats -s schema.json -d "data.*.json"

Validar JSON en cada commit (Pre-Commit Hook)

Para impedir que se commitee JSON sin validar, conecta un hook con husky + lint-staged:

// package.json
{
  "lint-staged": {
    "*.json": [
      "jq empty",
      "ajv validate -s schemas/$name.schema.json -d"
    ]
  }
}

# instala el hook
npx husky add .husky/pre-commit "npx lint-staged"

Para proyectos Python, el framework oficial pre-commit trae un hook check-json que ejecuta json.loads en cada fichero en stage.

Errores comunes de validación de JSON

Cuando la validación falla, la causa suele ser una de estas —— cada una tiene su guía dedicada:

Preguntas frecuentes

¿Cómo compruebo que una cadena es JSON válido?

Pásala a JSON.parse() dentro de try/catch (JavaScript) o json.loads() dentro de try/except (Python). Si no lanza, es válido. Para comprobación sin código, usa un validador en navegador.

¿Puedo validar JSON con una expresión regular?

No. JSON es una gramática recursiva que no puede expresarse con regex. Usa siempre un parser de verdad como JSON.parse().

¿Cuál es la diferencia entre validar y parsear JSON?

Parsear convierte el texto en un valor usable; validar sólo confirma que podría parsearse. En la práctica, un parse exitoso es la validación —— es la misma operación, simplemente descartas el resultado cuando solo te importa la validez.

¿Cómo valido JSON contra un esquema?

Usa JSON Schema con Ajv (JavaScript) o la librería jsonschema (Python). La validación con esquema comprueba tipos, campos requeridos y restricciones —— no solo sintaxis.

Valida JSON ahora —— sin instalación

Pega tu JSON en el validador JSON para ver errores de sintaxis al instante, con la línea y posición exactas resaltadas. Todo se ejecuta en tu navegador; ningún dato sale de tu máquina.