Skip to content

Capítulo 1.3: Formato JSON

Tiempo de estudio: 35 minutos


1. JSON: El lenguaje de la comunicación espacial

Imagine que una sonda espacial y el Centro de Control de la Misión (MCC) hablan diferentes idiomas. JSON (JavaScript Object Notation) es un lenguaje de datos universal, comprensible tanto para humanos como para máquinas. ¡Como el idioma internacional de los astronautas!

Propiedades principales:

  • 🪶 Ligero: transmisión rápida incluso con señal débil
  • 👀 Legible por humanos: la estructura es visible a simple vista
  • 🔄 Universal: compatible con todos los lenguajes de programación

💡 Analogía espacial:

JSON es como un telegrama digital con datos sobre las estrellas. En lugar de código Morse, estructuras claras {clave: valor}.


2. Anatomía de un mensaje JSON

JSON se compone de dos tipos de estructuras:

A. Objetos (Naves espaciales)

{
  "name": "Voyager-1",
  "launch_year": 1977,
  "is_active": true,
  "position": [-19.1, 42.7, 0.3]
}

B. Arrays (Cúmulos estelares)

[
  {"name": "Sirius", "magnitude": -1.46},
  {"name": "Canopus", "magnitude": -0.74},
  {"name": "Arcturus", "magnitude": -0.05}
]

⚡ Reglas de sintaxis:

  • Claves entre comillas " "
  • Valores: cadenas de texto, números, booleanos (true/false), null
  • Datos separados por comas
  • Llaves {} para objetos, corchetes [] para arrays

3. JSON vs XML: Batalla de formatos

Parámetro JSON (Satélite moderno) XML (Telescopio antiguo)
Legibilidad Alta (acceso directo a campos) Baja (etiquetas <planet>...</planet>)
Tamaño Compacto Voluminoso (+30% al tamaño)
Procesamiento Rápido Lento
Ejemplo {"planet": "Mars"} <planet>Mars</planet>

🔭 ¿Por qué JSON ganó en el espacio?

Las APIs de la NASA, SpaceX y la ESA usan JSON, ¡es ideal para la transmisión de datos!


4. Trabajo con JSON en código

Ejemplo Python (obtener datos de la Luna):

import requests
import json

# Usamos una API real, por ejemplo, para obtener datos del Sistema Solar
# от The Solar System OpenData API
try:
    response = requests.get("https://api.le-systeme-solaire.net/rest/bodies/terre")
    response.raise_for_status() # Comprueba errores HTTP (4xx, 5xx)

    planet_data = response.json()

    print(f"Nombre: {planet_data['englishName']}")
    print(f"Satélites: {[moon['moon'] for moon in planet_data['moons']]}")

    # Conversión de un diccionario Python a una cadena JSON para guardar
    planet_json_str = json.dumps(planet_data, indent=2, ensure_ascii=False) # ensure_ascii=False para cirílico
    print("\n--- JSON Formateado ---")
    print(planet_json_str)

except requests.exceptions.RequestException as e:
    print(f"Error de solicitud: {e}")

Ejemplo JavaScript (procesamiento de datos del telescopio):

const Data = `{
  "id": "terre",
  "name": "La Terre",
  "englishName": "Earth",
  "isPlanet": true,
  "moons": [
    {
      "moon": "La Lune",
      "rel": "https://api.le-systeme-solaire.net/rest/bodies/lune"
    }
  ],
  "semimajorAxis": 149598023,
  "perihelion": 147095000,
  "aphelion": 152100000,
  "eccentricity": 0.0167,
  "inclination": 0,
  "mass": {
    "massValue": 5.97237,
    "massExponent": 24
  },
  "vol": {
    "volValue": 1.08321,
    "volExponent": 12
  },
  "density": 5.5136,
  "gravity": 9.8,
  "escape": 11190,
  "meanRadius": 6371.0084,
  "equaRadius": 6378.1366,
  "polarRadius": 6356.8,
  "flattening": 0.00335,
  "dimension": "",
  "sideralOrbit": 365.256,
  "sideralRotation": 23.9345,
  "aroundPlanet": null,
  "discoveredBy": "",
  "discoveryDate": "",
  "alternativeName": "",
  "axialTilt": 23.4393,
  "avgTemp": 288,
  "mainAnomaly": 358.617,
  "argPeriapsis": 85.901,
  "longAscNode": 18.272,
  "bodyType": "Planet"
}`;

const dataObj = JSON.parse(Data);
console.log(dataObj.target);


5. Validación JSON: Comprobación de la "señal"

Antes de usar los datos, asegúrese de que el JSON:

  1. Tenga la estructura correcta (¡verifique los corchetes/llaves!)

  2. Contenga los campos esperados

  3. No tenga errores de sintaxis

Herramientas: - JSONLint (como un detector de basura espacial para JSON) - Analizadores sintácticos de lenguaje integrados (lanzarán un error si el formato es incorrecto)

⚠️ Ejemplo de error:

{"planet": "Mars" → ¡Falta la llave de cierre!

Solución: Siempre use json.loads() en Python o JSON.parse() en JS para verificar.


Cuestionario de repaso

1. JSON significa...

2. ¿Cómo se denota un objeto en JSON:

3. ¿Qué NO es un valor válido en JSON?

4. ¿Por qué JSON es mejor que XML para las APIs espaciales?

5. ¿Cómo se convierte una cadena JSON en un objeto Python?


🚀 Resumen del capítulo:

JSON es el "esperanto espacial" del mundo de las APIs. Conociendo su estructura, podrás:

  • 📡 Recibir datos de telescopios y sondas

  • 🔧 Convertir información entre sistemas

  • 🛰️ Guardar datos científicos en archivos

¡Prepárense para el acoplamiento! En el próximo capítulo, exploraremos la arquitectura REST API, el sistema de control de la "estación espacial" de tu servidor.

📌 Práctica: ¡Visite NASA Open APIs, encuentre la API de asteroides (Asteroids NeoWs) y estudie la estructura JSON en la respuesta!