Fetch · límite API JSON
Fetch API snake_case ↔ camelCase
Envuelve llamadas Fetch JSON para mantener camelCase en la aplicación y snake_case en el formato de red.
Convierte la solicitud JSON antes de serializar
import { keysToSnake } from "./api-case"
export async function postJson<T>(url: string, body: unknown): Promise<T> {
const response = await fetch(url, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(keysToSnake(body)),
})
if (!response.ok) {
throw new Error(`API request failed: ${response.status}`)
}
return response.json() as Promise<T>
}Convierte el objeto de la aplicación a snake_case antes de JSON.stringify.
Convierte la respuesta analizada antes de devolverla
import { keysToCamel } from "./api-case"
export async function getJson<T>(url: string): Promise<T> {
const response = await fetch(url)
if (!response.ok) {
throw new Error(`API request failed: ${response.status}`)
}
const wireData: unknown = await response.json()
return keysToCamel(wireData) as T
}Después de response.json(), convierte recursivamente las claves a camelCase.
Consideraciones de producción
- Úsalo solo con endpoints JSON; no transformes FormData, Blob, ArrayBuffer, streams o cargas de archivos.
- Convierte después de response.json(), no el texto bruto, para no modificar valores string.
- Mantén la detección de colisiones cuando varias claves puedan normalizarse al mismo resultado.
- Centraliza el wrapper en un módulo de cliente API compartido.
Probar el límite JSON online
Prueba objetos anidados, arrays, exclusiones, stop paths, prefijos, colisiones y diff de claves antes de implementar.
Suelta un archivo .json o elige uno de tu dispositivo
Los archivos se leen solo en tu navegador. Tamaño máximo: 5 MB.
JSON convertido
{
"userProfile": {
"firstName": "Ada",
"createdAt": "2026-09-12"
}
}El análisis, lectura de archivos, formato y conversión se ejecutan localmente en tu navegador. El JSON no se envía a un servidor de conversión.