Validar json online
En este artículo hablamos de que es json y como validar json online.
Como visualizar y validar JSON online
JSON (JavaScript Object Notation) proporciona una base para definir datos que se van a usar en varias aplicaciones y frameworks de desarrollo.
Desde archivos de configuración, intercambio de datos entre las capas, almacenaje de los datos, etc.
Habitualmente JSON define la sintaxis y el esquema JSON define la estructura. Hoy en día muchos lenguajes de programación y librerías soportan el uso de JSON.
La estructura de un contenido JSON contiene objetos, arrays, y pares de nombre/valor
- Un objeto se define usando llaves { }
- Un array se define usando corchetes [ ]
- Y los pares nombre/valor se definen usando "nombre":valor y se separan con una coma ,
El valor puede ser un número, una cadena de texto (entre comillas), un booleano (true o false), un objeto (definido entre llaves {}), el null, un array (definido por corchetes [ ]), o una fecha.
Por ejemplo veamos el siguiente contenido JSON:
{
"nombre":"Jose Carlos",
"coches": [
{ "marca":"Seat", "modelos":[ "Ibiza", "Arona", "Leon" ] },
{ "marca":"Honda", "modelos":[ "Jazz", "HR-V" ] }
]
}
El contenido JSON anterior es un ejemplo típico de un objeto JSON. Consta de una propiedad "nombre" que contiene el valor de texto, y una propiedad "coches" que contiene un array de objetos que a su vez tienen la propiedad "marca" y "modelos" que contiene un array de texto.
Del mismo modo se podría crear un contenido JSON con las motos.
{
"nombre":"Jose Carlos",
"coches": [
{ "marca":"Seat", "modelos":[ "Ibiza", "Arona" ] },
{ "marca":"Honda", "modelos":[ "Jazz", "HR-V" ] }
],
"motos": [ { "marca":"Honda", "modelos": [ "CBR500" ] } ]
}
A continuación se muestra una herramienta sencilla para validar JSON online y para comprobar que una cadena JSON sea correcta.
Para usarlo puedes copiar y pegar el texto json en la caja inferior y hacer clic en el botón Validar JSON
Un ejemplo sencillo de JSON sería el anterior con los coches:
Validar json
El esquema JSON
Para definir el esquema JSON utilizamos varias palabras como "$schema", "title", "description", "required".
El primer elemento "$schema" se usa de este modo:
{ "$schema":"http://json-schema.org/schema#" }
A continuación se usa el nombre y la descripcíón:
"title":"esquema para los coches", "description":"texto que describe el esquema de los datos asociados a los coches"
Luego se usa el tipo de datos, por ejemplo el objeto y sus propiedades:
"type":"object", "properties": { "name": { "type":"string" } }
El tipo puede ser "string", "object", "number", "array", "boolean" y "null".
El tipo array
Por defecto, el tipo "array" puede contener cualquier tipo, aunque es conveniente especificarlo mediante "items". Por ejemplo "items": {"type": "string" }. La longitud del array se define con "minItems" y "maxItems" para el mínimo y el máximo de elementos que puede contener.
Se pueden definir los tipos concretos del array en el orden que ocupan, es decir, para una dirección postal (nombre de calle num):
{
"type":"array",
"items":[ {"type":"string"}, {"type":"number"} ]
}
Incluso se podría añadir un "enum" con los tipos de vía ...
El tipo number
Como cosa curiosa, el tipo "number" puede ser entero o con coma flotante, pero no una cadena de texto con número.
Para definir el valor mínimo o máximo se utiliza "minimum" y "maximum". Para excluir el valor máximo se usa "exclusiveMaximum":true y "exclusiveMinimum":true para el mínimo.
El tipo string
Para definir la longitud de un tipo "string" podemos usar "minLength" y "maxLength" para fijar su longitud mínima y máxima. Incluso se puede definir una expresión regular con "pattern".
Para definir un conjunto de valores limitado para un tipo de datos, se puede especificar "enum":[1,2,3] o "num":["blanco","negro"]
También se puede restringir la posibilidad de que el contenido JSON añada propiedades adicionales a las definidas por el propio schema. Eso se define con "additionalProperties":false
Tipos combinados
Incluso se puede definir una combinación de schemas utilizando varias palabras reservadas que son: "allOf" (valida contra todos los subesquemas), "anyOf" (valida contra alguno de los subesquemas), "oneOf" (valida contra un esquema concreto) y el "not" (valida que no cumpla el esquema dado).
Así pues para el primer ejemplo de contenido JSON, tendríamos el siguiente esquema JSON:
{
"$schema":"http://json-schema.org/schema#",
"title":"Coches asignados",
"description":"Define el contenido json de los coches asignados a una persona",
"type":"object",
"properties": {
"nombre":{"type":"string"},
"coches":{"type":"array"}
}
}
Si quisieramos que las propiedades "nombre" y "coches" fueran obligatorias:
"required":["nombre", "coches"]