1. ¿Qué es JSON (JavaScript Object Notation)?
JSON (se pronuncia «yéison», ¡no «jé-son»!) se corresponde con JavaScript Object Notation. A pesar de la palabra «JavaScript» en el nombre, JSON es un formato universal, compatible con prácticamente todos los lenguajes de programación, incluido Java.
JSON fue ideado por Douglas Crockford a principios de los 2000 como una forma sencilla de intercambiar datos entre el navegador y el servidor. Antes de él predominaba XML — verboso y sobrecargado de etiquetas.
JSON resultó ser más compacto, más simple y fácil de leer a simple vista. Rápidamente se convirtió en el estándar de facto para el intercambio de datos entre cliente y servidor, especialmente en la web y en aplicaciones móviles.
¿Por qué JSON se convirtió en el estándar?
- Simplicidad de la sintaxis — fácil de escribir y leer a mano.
- Compacidad — sin etiquetas ni «relleno» innecesarios.
- Legibilidad — incluso alguien no técnico puede entender lo que ocurre.
- Facilidad de parseo — la mayoría de los lenguajes tienen bibliotecas integradas o de terceros.
- Interoperabilidad entre lenguajes — Java, Python, Kotlin, etc.; todos soportan JSON.
- Estándar para REST API — la inmensa mayoría de los API devuelven JSON.
Comparación con XML
| JSON | XML | |
|---|---|---|
| Legibilidad | Muy alta | Media (muchas etiquetas) |
| Tamaño | Compacto | Más voluminoso |
| Parseo | Sencillo | Requiere más esfuerzo |
| Extensibilidad | Admite anidamiento | Admite anidamiento |
| Rigor | Menos formal | Permite describir esquemas |
| Popularidad (2020+) | Muy alta | Se usa, pero con menor frecuencia |
JSON gana casi en todos los puntos. No obstante, XML sigue siendo relevante donde hacen falta esquemas complejos, tipado estricto, validación con XSD y soporte de comentarios y atributos — por ejemplo, en sistemas heredados y software bancario.
En la práctica, si no escribes software para un banco o una nave espacial, utiliza JSON.
2. Sintaxis básica de JSON
Si has trabajado con objetos de JavaScript o con diccionarios en otros lenguajes, la sintaxis te resultará familiar. En Java no existe un «diccionario» directo; su papel lo desempeñan las colecciones de java.util, principalmente Map<K, V> (muy a menudo — HashMap<K, V>).
Elementos principales
- Objetos — conjunto de pares «clave: valor», envueltos en { }.
- Arrays — listas ordenadas de valores, envueltas en [ ].
Ejemplo de objeto:
{
"name": "Alice",
"age": 25
}
Ejemplo de array:
[1, 2, 3, 4, 5]
Ejemplo de objeto con array:
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Tipos de valores permitidos
En JSON solo se pueden utilizar los siguientes tipos de datos:
| Tipo | Ejemplo | Descripción |
|---|---|---|
| Cadena | |
Siempre entre comillas dobles |
| Número | |
Enteros y decimales |
| Booleano | |
Valores lógicos |
| null | |
«Vacío», ausencia de valor |
| Objeto | |
Conjunto de pares «clave: valor» |
| Array | |
Lista de valores |
Atención: las claves en los objetos son siempre cadenas entre comillas dobles, por ejemplo "name". No se permiten comillas simples.
Ejemplos de JSON válido
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Ejemplo de JSON no válido (errores)
{
name: 'Bob', // Error: las claves y las cadenas deben ir entre comillas dobles
age: 25,
}
3. Estructura de datos: anidamiento de objetos y arrays
JSON admite anidamiento profundo: objetos en objetos, arrays en objetos, objetos en arrays, etc. Es como una matrioska.
Ejemplo de documento JSON complejo
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
En el objeto raíz hay un campo de tipo cadena "university", un campo booleano "active" y un array "students", en el que hay objetos de estudiantes.
Esquema visual (diagrama de bloques)
{
"clave": valor,
"array": [
{ "clave": valor },
{ "clave": valor }
],
"objeto": {
"clave": valor
}
}
4. Ventajas de JSON
¿Por qué JSON es tan popular?
- Fácil de leer por humanos y máquinas — la estructura se entiende fácilmente.
- Compacidad — mínimo de símbolos innecesarios.
- Simplicidad de parseo — multitud de bibliotecas para lectura/escritura.
- Estándar para REST API y aplicaciones móviles — se usa en todas partes.
- Flexibilidad — describe tanto listas simples como estructuras en árbol.
- Configuraciones y almacenamiento de datos — se usa a menudo en archivos de configuración.
- Compatibilidad en todos los lenguajes — Java, Python, Go, Rust y otros.
5. Práctica: análisis de ejemplos de archivos JSON
Ejemplo 1: lista de usuarios
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
Es un array en el que cada elemento es un objeto de usuario.
Ejemplo 2: configuración de una aplicación
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
Un objeto con el objeto anidado "database". Muy parecido a ajustes reales de aplicaciones.
Ejemplo 3: errores en JSON
{
"name": "Alice",
"age": 25,
} // Error: ¡coma sobrante antes de la llave de cierre!
Recuerda: en JSON no se puede poner una coma después del último elemento.
Ejemplo 4: claves sin comillas
{ name: "Alice", age: 25 } // Error: las claves deben ir entre comillas dobles
6. Matices útiles
Tabla: lo que se puede y lo que no se puede en JSON
| Se permite | No se permite |
|---|---|
|
|
|
|
|
|
|
|
|
|
Comparación breve entre JSON y objetos de Java
| Java | JSON |
|---|---|
|
Número, true/false |
|
"cadena" |
| List<T>, array | [valor1, valor2, ...] |
|
{ "clave": valor, ... } |
|
null |
| Clase con campos | { "campo": valor, ... } |
Ejemplo: clase Java y su representación JSON
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. Errores típicos al trabajar con JSON
Error n.º 1: comillas simples en lugar de dobles. JSON solo acepta comillas dobles para claves y cadenas.
{ 'name': 'Alice' } // ¡Error!
Error n.º 2: coma sobrante. No se puede poner coma después del último elemento.
{ "name": "Alice", } // ¡Error!
Error n.º 3: claves sin comillas. Las claves siempre deben ir entre comillas dobles.
{ name: "Alice" } // ¡Error!
Error n.º 4: números con ceros a la izquierda. Esos números no son válidos.
{ "age": 025 } // ¡Error!
Error n.º 5: uso de undefined. En JSON no existe undefined; utiliza null.
{ "value": undefined } // ¡Error!
Error n.º 6: True/False con mayúscula. En JSON solo existen true y false (en minúsculas).
{ "active": True } // ¡Error!
GO TO FULL VERSION