Konvertieren der Benennung von Bezeichnern zwischen camelCase und Unterstrichen während der JSON-Serialisierung / Deserialisierung

8

Ich arbeite an einer Python / Django-Anwendung, die als Web-API-Server zu seinem Frontend-Gegenstück dient. Der Datenaustausch zwischen dem Server und dem Client erfolgt im JSON-Format unter Verwendung von XMLHttpRequest (Javascript). Für diejenigen, die mit Python und Javascript vertraut sind, wissen Sie, dass sie unterschiedliche Benennungskonventionen für Bezeichner haben, wenn es um Variablen / Methoden / Attribute geht; Python verwendet names_with_underscores , während Javascript camelCaseNames bevorzugt. Ich möchte beide Konventionen in ihren jeweiligen Welten behalten und die Konvertierung von Identifikatoren durchführen, wenn der Datenaustausch stattfindet.

Ich habe beschlossen, die Konvertierung auf dem Server (Python) durchführen zu lassen. Meiner Meinung nach ist der logischste Ort für diese bidirektionale Konvertierung JSON-Serialisierung / Deserialisierung. Wie soll ich diesen Ansatz umsetzen? Beispiele werden sehr geschätzt.

Beachten Sie, dass ich auf Python 2.7 bin.

    
tamakisquare 17.06.2013, 20:17
quelle

2 Antworten

12

Eine Möglichkeit, reguläre Ausdrücke zu verwenden,

%Vor%

Und

%Vor%

Hinweis : Sie müssen eine Funktion ( lambda Ausdruck hier) verwenden, um die Groß- / Kleinschreibung zu ändern, aber das scheint ziemlich einfach zu sein.

BEARBEITEN:

Wenn Sie wirklich json-Objekte zwischen Python und Javascript abfangen und anpassen möchten, müssten Sie die Funktionalität des json-Moduls neu schreiben. Aber ich denke, das ist viel mehr Ärger als es wert ist. Stattdessen wäre so etwas äquivalent und würde in Bezug auf die Leistung nicht zu sehr von einem Hit abhängen.

Um jeden Schlüssel in einem dict zu konvertieren, das Ihr json-Objekt darstellt, können Sie so etwas tun,

%Vor%

Sie müssen nur angeben, welche Funktion angewendet werden soll,

%Vor%

Sie können diese gesamte Logik in die neuen Funktionen load und dump umwandeln,

%Vor%

Und benutze dann genauso wie du json.load und json.dump .

    
Jared 17.06.2013, 20:38
quelle
9

Jareds Antwort berücksichtigt die Möglichkeit von Arrays mit Objekten in einer JSON-Objektstruktur nicht.

Die Lösung benötigt drei Funktionen, um die Arrays rekursiv zu behandeln.

Für die Konvertierung von CamelCase in Unterstriche_mit_Räumen:

%Vor%

Für das JSON-Objekt

%Vor%

Für Arrays innerhalb des JSON-Objekts:

%Vor%

Verwendung:

%Vor%

Erträge:

%Vor%     
Evan Siroky 13.02.2014 00:05
quelle

Tags und Links