Python · dict · verschachteltes JSON

Python-dict-Schlüssel rekursiv zu camelCase konvertieren

Ein String-Helper reicht für verschachtelte dict/list-Strukturen nicht; konvertiere Keys an der Datengrenze und brich bei Kollisionen ab.

Von Camel Case Converter RedaktionVeröffentlicht 12.09.2026Zuletzt geprüft

dict- und list-Keys rekursiv konvertieren

from typing import Any

def snake_to_camel(name: str) -> str:
    parts = [part for part in name.split("_") if part]
    if not parts: return name
    head, *tail = parts
    return head.lower() + "".join(part[:1].upper() + part[1:].lower() for part in tail)

def keys_to_camel(value: Any) -> Any:
    if isinstance(value, list): return [keys_to_camel(item) for item in value]
    if not isinstance(value, dict): return value
    output: dict[Any, Any] = {}
    for key, child in value.items():
        next_key = snake_to_camel(key) if isinstance(key, str) else key
        if next_key in output: raise ValueError(f"Key collision: {next_key}")
        output[next_key] = keys_to_camel(child)
    return output

Listen vor dicts behandeln, Skalare unverändert lassen und dicts mit camelCase-String-Keys neu aufbauen.

Converter nach dem JSON-Parsing einsetzen

import json
snake_payload = json.loads(raw_json)
camel_payload = keys_to_camel(snake_payload)
print(json.dumps(camel_payload, indent=2))

json.loads erzeugt normale dict/list-Strukturen und bietet damit eine klare testbare Grenze.

Underscore-/Dollar-Präfixe bei Bedarf erhalten

def snake_to_camel_preserving_prefix(name: str) -> str:
    prefix_length = len(name) - len(name.lstrip("_$"))
    prefix = name[:prefix_length]
    body = name[prefix_length:]
    return prefix + snake_to_camel(body)

Bei _id, __typename oder $schema_version das Präfix abtrennen und nur den Rest konvertieren.

Hinweise für Produktion

  • Regel für wiederholte Unterstriche und leere Tokens festlegen.
  • Eine Kollision wie user_id / userId muss einen Fehler auslösen.
  • Ausschlüsse oder Stop Paths verwenden, wenn nur Teile des Payloads konvertiert werden sollen.
  • Dataclasses, ORM-Modelle oder Serializer können je nach App eine bessere Grenze sein.

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.