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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| JSON | formato de texto para enviar datos entre programas | |
| Objeto | grupo de parejas de clave y valor, entre llaves | {"id": 318} |
| Clave | nombre que sirve para encontrar un valor | status |
| Lista | valores en orden, entre corchetes | ["pago", "urgente"] |
| Anidado | dato que está dentro de otro dato | |
| YAML | formato 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
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
| Escribes | Pasos | Resultado |
|---|---|---|
| order["id"] | la clave id | 1043 |
| order["customer"]["city"] | el cliente, su ciudad | Bilbao |
| order["items"][0]["product"] | los artículos, el primero, su producto | café |
| order["items"][1]["qty"] | los artículos, el segundo, su cantidad | 6 |
| order["items"][2] | los artículos, el tercero | Un 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
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
# 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.