Fetch · JSON-API-Grenze
Fetch API snake_case ↔ camelCase
Kapsle JSON-Fetch-Aufrufe so, dass die App camelCase und das Wire-Format snake_case behält.
JSON-Request vor der Serialisierung konvertieren
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>
}Das App-Objekt wird vor JSON.stringify in snake_case umgewandelt.
Geparste Response vor der Rückgabe konvertieren
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
}Nach response.json() werden Schlüssel rekursiv in camelCase umgewandelt.
Hinweise für Produktion
- Nur für JSON-Endpunkte verwenden; FormData, Blob, ArrayBuffer, Streams und Datei-Uploads nicht transformieren.
- Nach response.json() mappen, nicht im Rohtext, damit String-Werte unverändert bleiben.
- Kollisionsprüfung beibehalten, wenn mehrere Quellschlüssel zum gleichen Zielschlüssel werden könnten.
- Den Wrapper in einem gemeinsamen API-Client-Modul zentralisieren.
JSON-Grenze online testen
Teste verschachtelte Objekte, Arrays, Ausschlüsse, Stop Paths, Präfixe, Kollisionen und Key-Diff vor der Implementierung.
.json-Datei hier ablegen oder vom Gerät auswählen
Dateien werden nur im Browser gelesen. Maximale Größe: 5 MB.
Konvertiertes JSON
{
"userProfile": {
"firstName": "Ada",
"createdAt": "2026-09-12"
}
}Parsing, Dateilesen, Formatierung und Schlüsselkonvertierung laufen lokal im Browser. JSON wird nicht an einen Conversion-Server gesendet.