Validar json online

 

imagen json

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 {}, 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" y "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 descripció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 con nombre de calle y número:

{
  "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 "enum": ["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 "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 quisiéramos que las propiedades "nombre" y "coches" fueran obligatorias:

{
  "required": ["nombre", "coches"]
}