目次
1. ¿Qué es JSON? (Conocimientos básicos)
Introducción a JSON
JSON (JavaScript Object Notation) es un formato de datos que se utiliza con frecuencia para la comunicación entre cliente y servidor. Es ligero, fácil de leer y tiene una estructura simple, por lo que se usa ampliamente en aplicaciones web y móviles. JSON está en formato de texto y puede manejarse fácilmente en cualquier lenguaje, lo que le otorga una gran versatilidad.Estructura básica de JSON
JSON representa los datos mediante pares clave-valor. Por ejemplo, la siguiente estructura muestra un JSON típico:{
"名前": "佐藤",
"年齢": 30,
"趣味": ["読書", "映画"]
}
En este ejemplo, 名前
es una cadena de texto, 年齢
es un número y 趣味
es un arreglo. Gracias a su simplicidad y legibilidad, el intercambio de datos resulta muy eficiente.Ventajas de JSON
- Ligero y eficiente: Al ser un formato de texto, el consumo de datos es reducido y se disminuye la carga en la red.
- Alta compatibilidad: Está soportado en casi todos los lenguajes de programación, lo que permite su uso en múltiples plataformas.
- Fácil de analizar: La lectura y escritura de datos es sencilla, especialmente en la comunicación con APIs.
2. Manejo de JSON en Python (Nivel básico)
El módulo json
en Python
En Python, se puede leer y escribir datos JSON fácilmente utilizando el módulo json
. Por ejemplo, para convertir datos JSON en un diccionario de Python, se usa la función json.loads()
.import json
json_data = '{"名前": "佐藤", "年齢": 30}'
python_obj = json.loads(json_data)
print(python_obj) # {'名前': '佐藤', '年齢': 30}
De manera inversa, para convertir un objeto de Python a formato JSON se utiliza json.dumps()
.python_obj = {"名前": "佐藤", "年齢": 30}
json_data = json.dumps(python_obj, ensure_ascii=False)
print(json_data) # {"名前": "佐藤", "年齢": 30}
Lectura y escritura en archivos
También es posible leer datos JSON desde un archivo o guardarlos en uno nuevo.# Leer desde archivo
with open('data.json', 'r') as f:
data = json.load(f)
# Escribir en archivo
with open('data.json', 'w') as f:
json.dump(python_obj, f, ensure_ascii=False)
3. Comunicación con JSON en Python (Nivel práctico)
Comunicación con APIs usando el módulo requests
Con el módulorequests
es sencillo enviar y recibir datos JSON mediante una API. A continuación, un ejemplo de cómo enviar datos con un POST y recibir la respuesta.Enviar datos JSON con una petición POST
import requests
url = 'https://example.com/api'
data = {'名前': '佐藤', '年齢': 30}
response = requests.post(url, json=data)
json_response = response.json()
print(json_response)
Recibir datos JSON con una petición GET
También se puede obtener JSON de una API mediante una petición GET.response = requests.get('https://example.com/api/user/1')
data = response.json()
print(data)

4. Manejo de errores y mejores prácticas
Manejo de errores en la comunicación con APIs
Si ocurre un error durante la comunicación con una API, es importante manejar las excepciones adecuadamente. En el siguiente ejemplo se capturan errores de red y de tiempo de espera.try:
response = requests.post(url, json=data)
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print("Http Error:", errh)
except requests.exceptions.ConnectionError as errc:
print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
print("OOps: Something Else", err)
Implementación de reintentos
En redes inestables, es útil implementar lógica de reintentos. Conrequests
se puede hacer utilizando la clase Retry
.from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get(url)
5. Validación de JSON
Validación con jsonschema
Para asegurarse de que los datos JSON recibidos cumplen con el formato esperado, se puede usar la libreríajsonschema
.from jsonschema import validate, ValidationError
schema = {
"type": "object",
"properties": {
"名前": {"type": "string"},
"年齢": {"type": "number"}
},
"required": ["名前", "年齢"]
}
json_data = {"名前": "佐藤", "年齢": 30}
try:
validate(instance=json_data, schema=schema)
print("JSON is valid")
except ValidationError as e:
print("Validation Error:", e)
Es posible manejar esquemas complejos y objetos anidados, lo que garantiza una validación robusta de los datos provenientes de APIs.6. Mejores prácticas de seguridad
Gestión de claves API
Se recomienda no incluir claves API directamente en el código fuente, sino gestionarlas mediante variables de entorno. Esto reduce los riesgos de seguridad.import os
api_key = os.getenv('API_KEY')
Sanitización de datos
Antes de enviar datos introducidos por el usuario al servidor, es importante aplicar sanitización para prevenir ataques como SQL Injection o Cross-Site Scripting (XSS).from html import escape
safe_data = escape(user_input)