JSON Serialisierung – aber flexibel bitte!

27.06.2007

In einschlägigen Fachmagazinen und auch an verschiedenen Stellen im Web ist oft die Rede von JSON (JavaScript Object Notation) als ein sehr leichtgewichtiges Datenaustauschformat. In der Tat lassen sich damit sehr performante Anwendungen realisieren. Auch wir setzten mittlerweile in mehreren operativen Projekten auf diese Technologie. Viele der Berichte legen ihr Hauptaugenmerk auf die Clientseite sowie die Struktur selbst. Mit diesem Beitrag möchte ich nun aber einen Blick auf den Server und somit auf die Serialisierung der Objekte werfen.

Mit zunehmender Verbreitung und Akzeptanz von JSON entstehen immer mehr Projekte und Werkzeuge zur Serialisierung von Objekten. So hat sich gerade im Java-Umfeld eine ganze Reihe solcher Serialisierungsframeworks etabliert. Jedoch unterscheiden sie sich teilweise in ihrer Funktionsweise. Auch wir haben bereits praktische Erfahrungen unter anderem mit dem Projekt „org.json“ sowie der Json-lib gesammelt. Im Wesentlichen unterscheiden sich beide Ansätze aber nicht großartig. Meiner Meinung nach aber besitzen beide einen entscheidenden Nachteil: Sie benötigen jeweils teils umfangreichen Code zur Serialisierung. So muss häufig durch ganze Objektstrukturen navigiert werden, damit deren Attribute ausgelesen und entsprechend gewandelt werden können. Der dabei entstehende Code gewinnt recht schnell an Umfang. Hinzu kommen natürlich auch Anpassungsarbeiten, falls sich die Attribute von Objekten ändern sollten. Zusammenfassend fehlt in meinen Augen also die Ausrichtung der Serialisierung am eigentlichen Datenobjekt selbst.

sourceforge.jpg Genau für diesen Ansatz scheint aber nun eine Lösung gefunden. Das Sourceforge-Projekt „FLEXJSON“ ist eine leichtgewichtige Bibliothek zur Serialisierung von Java-Objekten in JSON-Strukturen. Ein wesentlicher Unterschied im Vergleich zu den mir bisher bekannten Bibliotheken stellt die Flexibilität. So kann bei jeder Serialisierung beliebig festgelegt werden, welche Objektattribute berücksichtigt werden sollen. Darüber hinaus kann die Tiefe eines Objektgraphen mit angegeben werden.

Exemplarische JSON-Serialisierung eines Java-Objektes

public class User {
private String username;
private String firstname;
private String lastname;
private String password;
private List
addresses;
private List contactmedia;

… JSONSerializer serializer = new JSONSerializer();
serializer.include(„addresses“, „contactmedia“).serialize(user);

Das vorhergehende Beispiel gibt bereits einen kurzen Einblick in die Flexibilität von FLEXJSON. Erwartungsgemäß liefert der obige Serialisierungsaufruf eine komplette JSON-Struktur des User-Objektes inklusive aller Elemente innerhalb der Listen „addresses“ und „contactmedia“. An der Stelle sind keine manuellen Schleifen nötig, um die Listenelemente ebenfalls zu serialisieren. Diese Funktionalität steckt bereits in der Bibliothek selbst mit drin. Analog zum Schlüsselwort „include“ gibt es auch „exclude“. Darüber könnte man beispielsweise dass Passwort von der Serialisierung ausnehmen, so dass es nicht ständig an den Client übertragen wird.

Die Bibliothek FLEXJSON unterstützt auch die seit Java 5.0 bekannten Annotations. Sofern man in seiner Anwendung bereits auf diese Java-Version setzt, lässt sich die Serialisierung an zentraler Stelle, nämlich im Datenobjekt selbst, konfigurieren. So könnte man beispielsweise generell das Attribut „password“ von der Verarbeitung ausschließen. Hierfür genügt die Annotation „@JSON(include=false)“ vor der Get-Methode.

Fazit

Insgesamt betrachtet macht die Handhabung der Bibliothek aus meiner Sicht einen sehr guten Eindruck. Aufgrund der engen Verzahnung der Serialisierung mit den Datenobjekten selbst, entsteht so ein sehr flexibler Ansatz. Als positiver Seitenenffekt bleibt der Code für das Handling der Serialisierung zudem äußerst schlank. Eventuell lässt sich die Praxistauglichkeit in einem der zukünftigen Projekte auch noch mehr unter Beweis stellen!

Zurück zur Übersicht

2 Kommentare zu “JSON Serialisierung – aber flexibel bitte!

  1. Guten Tag Herr Ravenouz,

    in meinen Augen liefert die Projektseite unter (http://flexjson.sourceforge.net) bereits ausführliche Informationen im Umgang mit FLEXJSON. Im Rahmen eines kleinen exemplarischen Webprojektes habe ich mir mal die Funktionsweise und das Handling der Bibliothek näher betrachtet. Insbesondere habe ich hierbei einen Blick auf die Thematik der „Includes“ und „Excludes“ geworfen. „Learning by doing“ halte ich nach wie vor für einen sehr guten Ansatz!

    Viele Grüße vom Bodensee!

  2. Gruezi Herr Moser,
    auf welche Quellen beziehen Sie sich denn?
    Das Forum unter http://flexjson.sourceforge.net/ enthält einen einzigen Eintrag. Ich bin auf der Suche nach mehr Beispielen und Referenzen. Können Sie mir hierfür bitte weiterhelfen?
    Gaaaanz herzlichen Dank nach Friedrichshafen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*