FormatArc JSON Formatter mostrando una respuesta de API formateadaFormatArc JSON Formatter mostrando una respuesta de API formateada
Publicado: 2026-06-21

Tabla Markdown a partir de una respuesta JSON de API — curl, jq y el navegador

Convierte una respuesta JSON de API obtenida con curl en una tabla Markdown. Cubre el corte con jq, la paginación, seis formas de respuesta clasificadas por dificultad y un flujo solo de navegador que no sube tus datos.

Cuando quieres pegar una respuesta de API en un README, una issue o una wiki interna, el JSON crudo es difícil de leer y lo que realmente quieres es una tabla Markdown. Esta guía recorre cómo llegar a esa tabla a partir de una respuesta de curl, incluyendo los casos que suelen complicarse: paginación, objetos anidados y respuestas que ni siquiera son un array.

El camino más corto es "curl al endpoint → recortar el array con jq → pasar por CSV → procesar con CSV a Markdown". Las respuestas que no son arrays se recortan hasta llegar al array que te interesa, o se envuelven en [ ... ] antes de convertir. Todo corre en el navegador, así que ni las cabeceras de autenticación ni los datos personales salen de tu máquina.

La respuesta corta: recorta el array y luego convierte

Que una respuesta JSON de API se vuelva una tabla Markdown depende de una sola pregunta: ¿puedes recortarla hasta dejar un array de objetos con la misma forma? La mayoría de APIs reales devuelven algo así, que por sí mismo no es una tabla.

{
  "data": [
    { "id": "usr_001", "email": "mika@example.com", "active": true },
    { "id": "usr_002", "email": "noah@example.com", "active": false }
  ],
  "pagination": { "page": 1, "total": 2 }
}

Lo que quieres como tabla es data. Baja primero a ese array y luego pásalo a CSV; el resultado es una tabla Markdown con encabezados y filas limpios.

El flujo: curl + jq + FormatArc

Aquí está toda la cadena en una secuencia de comandos. Está pensada para que puedas mirar la salida entre pasos, en vez de confiar en una sola caja negra.

# 1. Llamar a la API y guardar el JSON
curl -s -H "Authorization: Bearer $TOKEN" \
  https://api.example.com/v1/users > users.json

# 2. Pegarlo en el Formateador JSON para confirmar la estructura
#    https://formatarc.com/es/json-formatter/

# 3. Recortar el array data y construir un CSV
jq -r '.data | (map(keys) | add | unique) as $cols
       | $cols, (.[] | [.[$cols[]]]) | @csv' users.json

# 4. Pegar el CSV en CSV a Markdown para obtener la tabla
#    https://formatarc.com/es/csv-to-markdown/

Si necesitas afinar el propio curl o hacer legible la respuesta cruda, Cómo formatear JSON con curl cubre cuatro formas de hacerlo. Si prefieres saltar jq, puedes empezar pegando la respuesta en Formateador JSON y darle forma desde ahí.

Paso 1: obtener la respuesta y formatearla

Para un endpoint GET al que puedas llegar desde el navegador, copia la respuesta directamente a Formateador JSON. Con curl, -s silencia la barra de progreso y -H lleva la cabecera de autenticación.

Guardar la respuesta en un archivo es lo que facilita el resto del proceso, porque puedes volver a correr jq tantas veces como necesites.

curl -s -H "Authorization: Bearer $TOKEN" \
  https://api.example.com/v1/users > users.json
cat users.json | python3 -m json.tool | head

python3 -m json.tool es el formateador de mínima dependencia para entornos sin jq. Para el set completo de one-liners, revisa la guía de formateo de JSON con curl.

Paso 2: recortar el array y construir el CSV

Mira el JSON formateado y localiza "qué clave guarda el array de objetos con la misma forma". Las formas más comunes son estas.

Forma de la respuesta de API Array que quieres Recorte con jq
[ {...}, {...} ] (array en la raíz) raíz .
{ "data": [ ... ] } data .data
{ "items": [ ... ], "next": "..." } items .items
{ "results": { "users": [ ... ] } } results.users .results.users

Elige el recorte correcto y construye un CSV desde ahí.

jq -r '.data | (map(keys) | add | unique) as $cols
       | $cols, (.[] | [.[$cols[]]]) | @csv' users.json

Esta expresión jq recopila todas las claves que aparecen en el array, las usa como fila de encabezado y escribe los valores de cada objeto en el mismo orden. Los objetos a los que les falta una clave aparecen como celda vacía, sin error de ejecución. @csv también maneja valores con comas o saltos de línea — los envuelve en "..." para que el CSV se pegue limpio en CSV a Markdown sin romper columnas.

Paso 3: convertir el CSV en tabla Markdown

Pega el CSV en CSV a Markdown y ejecuta la conversión.

CSV a Markdown generando una tabla a partir de una respuesta de APICSV a Markdown generando una tabla a partir de una respuesta de API

La salida es compatible con GFM (GitHub Flavored Markdown), así que entra directa en archivos README, issues de GitHub, documentos de Notion o entradas Markdown de Slack. Si después quieres retocar la tabla a mano, Sintaxis de tablas en Markdown cubre las reglas a nivel de spec.

Formas de respuesta clasificadas por dificultad de conversión

Cada API devuelve una forma distinta y la dificultad de convertirla en tabla Markdown sigue esa forma. Aquí tienes una matriz de dificultad contra la que puedes comparar tu endpoint.

Estilo de API Estructura de la respuesta Dificultad Qué hacer
Endpoint de lista simple array plano [ { ... } ] Baja Pasar . tal cual
Colección envuelta { "data": [ { ... } ] } Baja Recortar con .data
Cursor o página numerada { "items": [ ... ], "next_cursor": "..." } Media Unir páginas con jq antes de recortar
Campos anidados por fila { "user": { "name": ... }, "stats": { ... } } Media Aplanar con claves con punto
Respuesta GraphQL { "data": { "users": { "edges": [ { "node": { ... } } ] } } } Alta Sacar los nodos con .data.users.edges[].node
Array heterogéneo [ { type: "A", ... }, { type: "B", ... } ] Alta Separar por tipo antes de armar tablas

La decisión es la misma en todos los casos: confirma que puedes recortar hasta un array de objetos con la misma forma. Si no puedes, vuelve a Formateador JSON y encuentra la ruta de clave que te lleva ahí.

Unir respuestas paginadas en una sola tabla

Las APIs con cursor o con número de página devuelven la misma forma de array en cada página. La opción --slurp (-s) de jq combina varios archivos JSON en un solo array, así el resto del pipeline sigue funcionando.

for page in 1 2 3; do
  curl -s "https://api.example.com/v1/users?page=$page" > "page-$page.json"
done

jq -s '[.[] | .data[]]
       | (map(keys) | add | unique) as $cols
       | $cols, (.[] | [.[$cols[]]]) | @csv' page-*.json

-s envuelve el JSON de cada archivo en un array externo, y .[] | .data[] recorre el data de cada respuesta y concatena sus elementos. A partir de ahí, el mismo pipeline de jq construye un único CSV que pegas en CSV a Markdown.

Aplana los objetos anidados antes de convertir

Si tu respuesta trae un registro de usuario con una dirección anidada, dejarlo tal cual mete {...} en la celda, lo cual es ilegible. Aplánalo con claves con punto.

[
  {
    "id": "usr_001",
    "name": "Mika",
    "address": { "city": "Tokyo", "zip": "100-0001" }
  }
]
jq -r '.[] | {id, name, "address.city": .address.city, "address.zip": .address.zip}
       | [.id, .name, ."address.city", ."address.zip"]
       | @csv' users.json

El CSV ahora tiene cuatro columnas: id, name, address.city, address.zip. Pégalo en CSV a Markdown y los campos anidados aterrizan en columnas propias. Para arrays anidados (tags: ["a", "b"]), juntarlos con join("|") deja cada fila en una sola línea.

Cuando quieres mantenerlo en el navegador

Las respuestas de API suelen llevar cabeceras de autenticación, datos de clientes o IDs internos, así que pegarlas en un convertidor de terceros es difícil de justificar. FormatArc ejecuta la conversión en el navegador y nunca envía la entrada a un servidor. El detalle del mecanismo, junto con una comparación con convertidores hospedados, está en ¿Son seguros los convertidores online para JSON sensible?.

Un flujo puramente en el navegador se ve así:

  1. En lugar de curl, copia la respuesta desde las DevTools (pestaña Network)
  2. Pégala en Formateador JSON y verifica la estructura
  3. Deja solo las claves que necesitas y reorganiza el array como CSV
  4. Lleva el CSV a CSV a Markdown para obtener la tabla

Para arrays pequeños, dar forma al CSV a mano es perfectamente viable incluso sin jq.

Tropiezos típicos

Estas son las situaciones que tienden a descarrilar el flujo.

  • La respuesta es un único objeto, no un array: envuélvelo como [ ... ] o pásalo a una tabla de dos columnas clave/valor. Cómo convertir JSON en una tabla Markdown cubre ambos casos
  • A algunos objetos les faltan claves: el patrón add | unique de jq detecta todas las claves que aparecen en cualquier objeto y las que faltan quedan como celdas vacías
  • Los valores contienen saltos de línea o pipes (|): @csv los entrecomilla del lado CSV, pero en el Markdown final los pipes todavía deben ser \|. Cómo arreglar una tabla Markdown rota repasa los escapes
  • Los IDs numéricos grandes pierden precisión: las APIs que devuelven IDs como números se recortan en JavaScript. Conviértelos con tostring de jq para que el CSV los guarde como cadenas
  • Caracteres mal codificados: prueba curl --compressed, o pasa el cuerpo por iconv -f UTF-8 antes de pegarlo en el Formateador JSON

Guías de conversión relacionadas

Referencias