• Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Mi Blog
✔ Cómo validar ficheros JSON desde consola en GNU/Linux

✔ Cómo validar ficheros JSON desde consola en GNU/Linux

¿Es la sintaxis de mi documento JSON acorde con su SCHEMA? Muchas veces, cuando estamos programando ficheros JSON, nos hemos planteado esta pregunta a medida que vamos avanzando en el desarrollo de nuestro proyecto. Hoy os enseño un método muy sencillo para validar nuestros ficheros JSON con su correspondiente SCHEMA para ver si los datos que hemos generado son correctos y acordes tal y como se espera. Es un tutorial muy corto y sencillo que cualquier persona puede seguir. Si estás listo, continúa leyendo...

¿QUE ES JSON?

JSON, acrónimo de JavaScript Object Notation, es un formato de texto ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript aunque hoy, debido a su amplia adopción como alternativa a XML, se considera un formato de lenguaje independiente.

Una de las supuestas ventajas de JSON sobre XML como formato de intercambio de datos es que es mucho más sencillo escribir un analizador sintáctico (parser) de JSON. En JavaScript, un texto JSON se puede analizar fácilmente usando la función eval(), lo cual ha sido fundamental para que JSON haya sido aceptado por parte de la comunidad de desarrolladores AJAX, debido a la ubicuidad de JavaScript en casi cualquier navegador web.

En la práctica, los argumentos a favor de la facilidad de desarrollo de analizadores o de sus rendimientos son poco relevantes, debido a las cuestiones de seguridad que plantea el uso de eval() y el auge del procesamiento nativo de XML incorporado en los navegadores modernos. Por esa razón, JSON se emplea habitualmente en entornos donde el tamaño del flujo de datos entre cliente y servidor es de vital importancia (de aquí su uso por Yahoo, Google, etc, que atienden a millones de usuarios) cuando la fuente de datos es explícitamente de fiar y donde no es importante el no disponer de procesamiento XSLT para manipular los datos en el cliente.

Si bien es frecuente ver JSON posicionado contra XML, también es frecuente el uso de JSON y XML en la misma aplicación. Por ejemplo, una aplicación de cliente que integra datos de Google Maps con datos meteorológicos en SOAP hacen necesario soportar ambos formatos.



JSONEjemplo de JSON

1.- ELEMENTOS USADOS EN ESTE TUTORIAL

  • GNU/Linux Debian 8.0 64bits
  • Conexión a Internet

2.- INSTALACIÓN DE JSON-SPEC

Para instalar el paquete "json-spec", debemos instalar previamente el paquete "pip". Este paquete nos permitirá gestionar e instalar los paquetes auxiliares de tipo Python, como es el caso de json-spec. Primero de todo, y como es habitual, haremos update de nuestros repositorios con el usuario "root" o con otro usuario con privilegios suficientes con "su":

root@localhost# apt-get update

A continuación, instalamos python-pip con el comando:

root@localhost# apt-get install python-pip

Por último, instalamos el paquete json-spec con la utilidad "pip" de la siguiente forma:

root@localhost# pip install json-spec 

Si somos un poco vagos, podemos ejecutar todos los pasos de una sola vez con:

root@localhost# apt-get update && apt-get install python-pip && pip install json-spec 

3.- FICHERO JSON Y SCHEMA

Para este tutorial, usaremos un fichero de datos JSON llamado (datos.json) y el esquema que debe seguir estará definido en el fichero (esquema.json). Como la sintaxis es sumamente sencilla de entender, tanto del fichero de datos como del esquema, haré solamente un "cut&paste" de ambos ficheros por si los necesitáis para probar.

datos.json

{
"foo": 32,
"bar": "Must equal this value",
"baz": {
"staticProperty": [
"This needs at least one number",
32
],
"property1": "The propertyNames keyword is an alternative to patternProperties",
"property2": "All property names must match supplied conditions (in this case, it's a regex)"
}
}

schema.json

{
"type": "object",
"properties": {
"foo": {
"type": "number"
},
"bar": {
"const": "Must equal this value"
},
"baz": {
"type": "object",
"properties": {
"staticProperty": {
"type": "array",
"contains": {
"type": "number"
}
}
},
"propertyNames": {
"pattern": "^([0-9a-zA-Z]*)$"
},
"additionalProperties": {
"type": "string"
}
}
}
}

4.- VALIDAR JSON + SCHEMA

Para validar tanto nuestro JSOn como nuestro SCHEMA, podemos acudir a la ayuda:

root@localhost:~# json --help
usage: json [-h] [--version] ...

positional arguments:
choose one of these actions
add add fragment to a document
check check member of a document
copy copy a member of a document
extract extract a member of a document
move move a member of a document
remove remove a member of a document
replace replace a member of a document
validate validate a document against a schema

optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit

Si queremos ver la ayuda específica para el parámetro "validate", ejecutaremos:

root@localhost:~# json validate --help
usage: json validate [-h] [--document-json | --document-file ]
[--schema-json | --schema-file ]
[--indent ]

Validate document against a schema.

optional arguments:
-h, --help show this help message and exit
--document-json
json structure
--document-file
json filename
--schema-json
json structure
--schema-file
json filename
--indent
return an indented json

Tenemos varias opciones para validar nuestros ficheros. Existen 4 formas que vienen en la ayuda y las cuales se muestra a continuación:

examples:
json validate --schema-file=schema.json --document-json='{"foo": ["bar", "baz"]}'
echo '{"foo": ["bar", "baz"]}' | json validate --schema-file=schema.json
json validate --schema-file=schema.json --document-file=doc.json
json validate --schema-file=schema.json doc.json

Para validar nuestro fichero de datos datos.json y nuestro esquema schema.json ejecutaremos una de las 4 opciones del apartado anterior. Por ejemplo:

root@localhost:~# json validate --schema-file=schema.json --document-file=datos.json

Si no sale nada, es que nuestro JSON+SCHEMA son válidos. En caso de que tengamos errores, se nos avisará de ellos. En el punto 5 forzaremos un error para ver como json-spec nos avisa.

5.- VALIDAR JSON + SCHEMA (ERRÓNEO)

Si cambiamos la variable "foo" para que tome un valor que no sea un número, json-spec nos avisará de dicho error:

datos.json

{
"foo": "Not a number",
"bar": "Doesn't equal constant",
"baz": {
"staticProperty": [
"This array needs at least one number"
],
"property1": "The propertyNames keyword is an alternative to patternProperties",
"pr()perty2": "All property names must match supplied conditions (in this case, it's a regex)"
}
}

schema.json

{
"type": "object",
"properties": {
"foo": {
"type": "number"
},
"bar": {
"const": "Must equal this value"
},
"baz": {
"type": "object",
"properties": {
"staticProperty": {
"type": "array",
"contains": {
"type": "number"
}
}
},
"propertyNames": {
"pattern": "^([0-9a-zA-Z]*)$"
},
"additionalProperties": {
"type": "string"
}
}
}
}

Validamos y vemos el error:

root@dns-server:~# json validate --schema-file=schema.json --document-file=datos.json 
Exception: document does not validate with schema.

#/foo
- reason Wrong type

ENJOY!


Raúl Prieto Fernández

Sitio Web: /

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

Escribir un comentario

Información básica sobre Protección de Datos

Responsable: Raúl Prieto Fernández +info

Finalidad: Moderar los comentarios a los artículos publicados en el blog. +info

Legitimación: Consentimiento del interesado +info

Destinatarios: No se comunicarán datos a persona u organización alguna. +info +info

Derechos: Tiene derecho a Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. +info

Plazo de conservación de los datos: Hasta que no se solicite su supresión por el interesado.

Información adicional: Puede consultar la información adicional y detallada sobre Protección de Datos Personales en mi página web raulprietofernandez.net +info

Código de seguridad
Refescar


LOGIN / ENTRAR

BUSCAR EN EL BLOG

TWITTER TIMELINE

Booking.com

ENCUESTA

¿Cual es el mejor Sistema Operativo?

Como es lógico, esta web utiliza cookies propias y de terceros para elaborar información estadística y mostrar publicidad personalizada a través del análisis de tu navegación, conforme a la política de cookies.

  Si continúas navegando, aceptas su uso.