¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Datos en JSON y YAML

Después de esta lección: Puedo leer y escribir datos en JSON y YAML.

Lección de 50 minSin comandos

Una incidencia que viaja

Una clienta abre una incidencia en la web de una tienda. La web se la pasa al programa de soporte, y este avisa al almacén.

Tres programas distintos tienen que entender los mismos datos.

Para eso usan formatos de texto que todos saben leer. Los más comunes se llaman JSON y YAML.

Al final de esta lección

Nota

Puedo leer y escribir datos en JSON y YAML.

Palabras clave

PalabraQué significaEjemplo
JSONformato de texto para enviar datos entre programas
Objetogrupo de parejas de clave y valor, entre llaves{"id": 318}
Clavenombre que sirve para encontrar un valorstatus
Listavalores en orden, entre corchetes["pago", "urgente"]
Anidadodato que está dentro de otro dato
YAMLformato que guarda los mismos datos con sangría

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

JSON se hace con objetos y listas

Un objeto va entre llaves, { }. Dentro hay parejas de clave y valor separadas por comas.

Una lista va entre corchetes, [ ]. Sus valores van en orden.

En Python, json.loads convierte el texto en un diccionario. Luego lees cada valor por su clave.

Las claves y los nombres de variables van en inglés, como en casi todas las empresas. Los valores pueden ir en español.

Lee una incidencia

Código: python
import json

# Así llega una incidencia desde la API de soporte: como texto.
text = '{"id": 318, "customer": "Marta Ruiz", "status": "abierta", "tags": ["pago", "urgente"]}'

ticket = json.loads(text)  # el texto pasa a ser un diccionario
print(ticket["customer"])
print(ticket["status"])
print(ticket["tags"][0])

# Te toca: muestra la segunda etiqueta, la que dice urgente.

Los datos anidados se leen paso a paso

Un valor puede ser otro objeto o una lista. Entonces se dice que está anidado.

Para llegar a él, das un paso por nivel: primero una clave, luego otra, luego una posición.

Las posiciones de una lista empiezan en 0. El primer elemento es el 0 y el segundo es el 1.

Este es el pedido de la tabla: {"id": 1043, "customer": {"name": "Jorge", "city": "Bilbao"}, "items": [{"product": "café", "qty": 2}, {"product": "leche", "qty": 6}]}

Ejemplo resuelto: un pedido con datos anidados

EscribesPasosResultado
order["id"]la clave id1043
order["customer"]["city"]el cliente, su ciudadBilbao
order["items"][0]["product"]los artículos, el primero, su productocafé
order["items"][1]["qty"]los artículos, el segundo, su cantidad6
order["items"][2]los artículos, el terceroUn error: solo hay dos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que JSON acepta comillas simples, como Python. JSON solo acepta comillas dobles. Si escribes {'id': 1}, json.loads da un error. Usa siempre " en el texto JSON.

Escribe una incidencia en JSON

Código: python
import json

# Una incidencia nueva, como diccionario de Python.
ticket = {"id": 319, "customer": "Iker Etxeberria", "status": "abierta"}

# json.dumps la convierte en texto JSON para enviarla a otro programa.
text = json.dumps(ticket, ensure_ascii=False)
print(text)

# Te toca: añade la clave "priority" con el valor "alta" y vuelve a ejecutar.

YAML usa sangría en vez de llaves

YAML guarda los mismos datos que JSON, pero es más fácil de leer para una persona. Por eso se usa mucho en archivos de configuración.

Cada línea es clave: valor. Un guion, -, marca un elemento de una lista.

Lo anidado va con sangría, es decir, con espacios al principio. Los espacios importan: uno de más cambia el significado.

Lee un archivo de configuración

Código: bash
# Creamos el archivo de configuración de un servicio de envíos.
cat > envios.yaml <<'FIN'
service: envios
port: 8080
debug: false
warehouses:
  - Getafe
  - Zaragoza
contact:
  name: Equipo de logística
  email: [email protected]
FIN

cat envios.yaml

# Te toca: con grep, muestra solo la línea del puerto.

Lo que espera quien te contrata

Consejo

Casi todas las API responden en JSON, y muchas herramientas se configuran con YAML. En una entrevista técnica es normal que te enseñen unos datos y te pregunten cómo llegar a un valor.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.