Texto a JSON
Un currículo que da el teléfono en una frase y el puesto tres párrafos después vuelve como un único registro ordenado con ambos datos, con la forma exacta que usted definió y comprobado antes de la entrega. Paga por uso, sin suscripción.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El texto libre se resiste a entrar en una columna de base de datos hasta que alguien lo obliga.
Por qué el texto escrito para personas no cabe en una base de datos
El texto libre se resiste a entrar en una columna de una base de datos hasta que alguien lo obliga. Lo que se escribe para personas casi nunca coincide con los datos que necesita una aplicación. Un currículo menciona el teléfono en una frase y el puesto tres párrafos más abajo; una ficha de producto esconde el material y las medidas entre frases publicitarias. Escribir reglas de extracción distintas para cada fuente es una batalla perdida, porque el formato cambia cada vez que cambia la fuente. Aquí usted describe una sola vez el registro que quiere, con sus datos, el tipo de valor de cada uno y cuáles son obligatorios, y lo aplica a cualquier texto.
Un registro con la forma exacta que pidió
Lo que vuelve sigue su estructura al pie de la letra: sin datos inventados de más, sin nombres cambiados y sin textos convertidos en números cuando no corresponde. Cada resultado se comprueba contra su estructura antes de entregarse, así que un registro mal formado nunca se cuela en su base de datos para romper algo más tarde; usted ve el problema en el momento. Si un dato obligatorio de verdad no aparece en el texto, el resultado lo dice en lugar de inventar un relleno creíble. Los usos típicos son convertir las fichas de producto de los proveedores en registros de catálogo con precio, medidas y material, y convertir el correo de queja de un cliente en una categoría, un nivel de urgencia y una referencia de cuenta para enrutarlo.
Por qué 'simplemente parsearlo' es más difícil de lo que parece
El texto escrito para personas casi nunca coincide con los campos que necesita una aplicación. Un currículum menciona un teléfono en una frase y un puesto tres párrafos después; una descripción de producto esconde el material y las dimensiones dentro de un texto de marketing.
Dónde reemplaza a un pequeño ejército de analizadores a medida
Los equipos que reciben texto de muchas fuentes distintas (listados extraídos por scraping, correos reenviados, PDFs convertidos a texto, formularios escaneados) tradicionalmente escriben y mantienen un analizador distinto por fuente. Una sola llamada de extracción guiada por esquema reemplaza toda esa carga de mantenimiento, porque el modelo lee la intención en lugar de calzar patrones frágiles, así que sobrevive a los cambios de formato que romperían una expresión regular.
Qué puede hacer con ella
Ingesta de currículums para herramientas de contratación
Extrae nombre, datos de contacto, historial laboral y habilidades de un currículum en texto libre hacia un esquema consistente que su sistema de seguimiento de candidatos ya entiende.
Normalización de catálogos de productos
Convierte descripciones de producto extraídas por scraping o entregadas por un proveedor en registros estructurados con precio, dimensiones y material listos para su catálogo.
Triage de tickets de soporte
Convierte el correo de queja de un cliente, escrito en texto libre, en un objeto estructurado con categoría, urgencia y referencia de cuenta para enrutamiento automático.
Preguntas frecuentes
¿Qué pasa si el texto no contiene un campo obligatorio?
La respuesta indicará que el campo no se pudo encontrar en lugar de inventar un valor plausible, para que pueda distinguir datos faltantes de una falla de análisis.
¿Soporta objetos anidados y arreglos dentro del esquema?
Sí, los esquemas pueden describir estructuras anidadas y listas, y la extracción respeta esa forma en lugar de aplanar todo a un solo nivel.
¿Cómo se calcula el precio?
Una extracción fallida nunca se cobra; el sistema reintenta automáticamente hasta tres veces antes de devolver un error claro.
¿Puedo procesar un lote grande de documentos?
Sí, está pensada para uso masivo: encole tantas solicitudes asíncronas como necesite contra el mismo esquema y recoja los resultados conforme se completan.
¿Puede añadir o renombrar datos que no pedí?
No. El resultado contiene solo los datos que usted definió, con los nombres que eligió y el tipo de valor que indicó. No se inventa nada de más y ningún texto se convierte en número sin avisar.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/text/to-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"El informe trimestral cerró con 1,2 M€ de ingresos.","schema":{"name":"string","total":"number"}}'const res = await fetch("https://api.kit.forhosting.com/text/to-json", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "El informe trimestral cerró con 1,2 M€ de ingresos.",
"schema": {
"name": "string",
"total": "number"
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/to-json",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "El informe trimestral cerró con 1,2 M€ de ingresos.",
"schema": {
"name": "string",
"total": "number"
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/to-json", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"El informe trimestral cerró con 1,2 M€ de ingresos.","schema":{"name":"string","total":"number"}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"El informe trimestral cerró con 1,2 M€ de ingresos.","schema":{"name":"string","total":"number"}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/to-json", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "El informe trimestral cerró con 1,2 M€ de ingresos.",
"schema": {
"name": "string",
"total": "number"
}
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.to_json",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_tokens | 20000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |
Notas técnicas
Este endpoint hace justamente eso: le da su esquema y un bloque de texto (una descripción de producto, un currículum, un ticket de soporte) y devuelve JSON que coincide exactamente con sus campos, validado para que nada mal formado llegue a su aplicación.
Por qué 'simplemente parsearlo' es más difícil de lo que parece
Escribir un analizador para cada formato de origen es una batalla perdida, porque el formato cambia cada vez que cambia la fuente. text.to_json reemplaza esa lógica frágil de parseo por un esquema que define una sola vez y texto que puede apuntar a cualquier cosa.
Usted define la forma, nosotros la llenamos
Si un campo obligatorio realmente no está presente en el texto fuente, la respuesta lo indica en vez de inventar un valor que solo parece plausible. POST /text/to-json recibe dos cosas: su esquema de destino, que describe los campos, sus tipos y cuáles son obligatorios, y el texto fuente del cual extraer. La respuesta es JSON construido exactamente con esa forma: sin campos inventados de más, sin claves renombradas, sin conversiones silenciosas de tipo que vuelvan número algo que debería seguir siendo texto.
La validación no es un paso secundario aquí
Validar en el momento de generar convierte eso en un error inmediato y visible. El resultado se revisa contra su esquema antes de devolverse, así que lo que llega a su webhook ya es estructuralmente válido: tipos correctos, campos obligatorios presentes, sin claves huérfanas. Esto importa más de lo que suena: los flujos de texto a estructura suelen fallar en silencio, con un registro mal formado que se cuela en una base de datos y rompe un reporte tres semanas después.
Cómo se integra en la automatización
Como la tarea es asíncrona y entrega los resultados por webhook firmado, encaja de forma limpia en un flujo de ingesta: llega un documento, se convierte a texto, se envía a extracción, y el JSON resultante se inserta directo en su sistema sin necesidad de revisión manual para el caso común, aunque nada le impide revisar puntualmente los casos que su negocio considera de mayor riesgo.
Casos de integración
Seguimiento de digitalización de documentos
Pasa el texto obtenido por OCR de formularios escaneados por el endpoint para obtener JSON limpio y validado en vez de escribir expresiones regulares a mano contra texto ruidoso.
Preguntas técnicas
¿Cómo sabe la API de texto a JSON qué campos quiero?
Le envía un esquema que describe los campos deseados, sus tipos y cuáles son obligatorios, y el endpoint extrae y da formato al texto fuente para que coincida exactamente con esa forma.
¿El resultado se valida antes de que lo reciba?
Sí, el JSON se revisa contra su esquema en cuanto a tipos correctos y campos obligatorios antes de entregarse, así que lo que llega a su webhook ya es estructuralmente sólido.
¿Existe un plan gratuito para probar la conversión de texto a JSON?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cómo recibo el JSON una vez procesado?
Por webhook firmado, recomendado para flujos automatizados, o por un enlace firmado que permanece válido 24 horas para recuperación manual.