Extraer JSON desde terminal
Para extraer el JSON que una página web obtiene mediante una llamada a una API y luego muestra en pantalla, desde la terminal, el método más directo depende de cómo la página presenta ese JSON. Aquí te explico varios escenarios y las herramientas que puedes usar.
1. La página muestra el JSON directamente (por ejemplo, es una API pública)
Si la URL que visitas en el navegador devuelve el JSON en texto plano (como cuando entras a https://api.example.com/data), simplemente puedes usar curl o wget para obtenerlo y, si quieres formatearlo, usar jq:
curl "https://api.example.com/data" | jq .
Si no tienes jq instalado, puedes omitirlo y ver el JSON en bruto:
curl "https://api.example.com/data"
2. El JSON está incrustado en el HTML de la página
A veces la página incluye el JSON dentro de una etiqueta <script> (por ejemplo, para inicializar datos) o dentro de un <pre> para mostrarlo. En ese caso puedes descargar el HTML y extraerlo con herramientas de línea de comandos.
Con grep y sed (sencillo pero frágil)
Si el JSON está en una línea que puedes identificar, por ejemplo:
<script>var datos = {"clave": "valor"};</script>
Podrías extraerlo con:
curl -s "https://ejemplo.com/pagina" | grep -oP 'var datos = \K.*?;' | sed 's/;$//' | jq .
Esto es muy específico y puede romperse si el HTML cambia.
Con herramientas para parsear HTML (más robusto)
pup(una herramienta tipo CSS selector):curl -s "https://ejemplo.com/pagina" | pup 'script text{}' | grep -o 'datos.*' ...htmlq(similar ajqpero para HTML):curl -s "https://ejemplo.com/pagina" | htmlq 'script' --text
Luego puedes filtrar el texto para quedarte solo con el JSON.
3. El JSON se carga dinámicamente mediante JavaScript
Si la página hace una petición AJAX/fetch y luego inserta el JSON en el DOM, el HTML inicial no contiene los datos. En este caso necesitas:
a) Encontrar la URL de la API usando el navegador (interfaz gráfica)
Abre las herramientas de desarrollo (F12), ve a la pestaña Red (Network), recarga la página y busca la petición que devuelve el JSON. Copias la URL (y si tiene cabeceras especiales como Authorization, también las necesitarás). Luego desde la terminal usas curl con esas cabeceras.
curl -H "Authorization: Bearer token" "https://api.example.com/endpoint" | jq .
b) Usar un navegador headless desde la terminal
Herramientas como Puppeteer (Node.js) o Playwright permiten automatizar un navegador y capturar las respuestas de red. Por ejemplo, con Puppeteer:
// script.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://ejemplo.com');
// Escuchar eventos de respuesta
page.on('response', async response => {
const url = response.url();
if (url.includes('api/')) { // Filtra por la URL que te interesa
const json = await response.json();
console.log(JSON.stringify(json, null, 2));
}
});
// Esperar un poco para que se carguen las peticiones
await page.waitForTimeout(5000);
await browser.close();
})();
Lo ejecutas con:
node script.js
Esto imprimirá el JSON en la terminal.
4. Interceptar el tráfico de red (más avanzado)
Puedes usar herramientas como mitmproxy o tcpdump para capturar las peticiones HTTP mientras navegas, pero es más complejo y suele ser excesivo para este propósito.
Resumen práctico
La forma más común y sencilla es:
- Identificar la URL de la API usando las herramientas de desarrollo del navegador (pestaña Red).
- Reproducir la petición desde la terminal con
curl, incluyendo las cabeceras necesarias. - Formatear la salida con
jqpara leerla cómodamente.
Por ejemplo:
curl -s 'https://ejemplo.com/api/datos?param=1' -H 'Accept: application/json' | jq .
Si el JSON es muy grande, puedes redirigirlo a un archivo:
curl ... > datos.json
Y luego visualizarlo con less o abrirlo con jq:
jq . datos.json
Espero que esta guía te ayude a extraer el JSON que necesitas desde la terminal.