Mi Blog
👉 Cómo validar ficheros JSON desde consola en GNU/Linux

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

 
(4 votos)

¿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...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿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!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!
Cookies

Usamos cookies en nuestro sitio web. Algunas de ellas son esenciales para el funcionamiento del sitio, mientras que otras nos ayudan a mejorar el sitio web y también la experiencia del usuario (cookies de rastreo). Puedes decidir por ti mismo si quieres permitir el uso de las cookies. Ten en cuenta que si las rechazas, puede que no puedas usar todas las funcionalidades del sitio web.