Konvertieren von JSON-Stil-Eigenschaften in Java CamelCase-Namen mit GSON
Ich bin mit GSON zum konvertieren von JSON-Daten, die ich zu einem Java-Objekt. Es funktioniert sehr gut in all meinen tests.
Das problem ist, dass unsere Reale Objekte haben einige Eigenschaften, die den Namen is_online. GSON nur ordnet Sie, wenn Sie die Bezeichnung völlig gleich, es wäre schön, GSON konvertieren der Namen auf Java-camel-case isOnline.
Es scheint, dies ist möglich, während der Erstellung der JSON-Daten, camel-case umgewandelt, Unterstrich getrennte Wörter im JSON-Format. Aber ich kann nicht einen Weg finden, geben Sie dies in die andere Richtung.
InformationsquelleAutor der Frage Janusz | 2010-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe mit der folgenden Einstellung funktioniert perfekt, beim Lesen von json mit Unterstrichen Attribute und die Verwendung von camelCase in meine Modelle.
InformationsquelleAutor der Antwort Hampei
Können Sie die
SerializedName
Anmerkung:Hinweis: Wenn Sie festgelegt haben, dass ein
FieldNamingPolicy
schonSerializedName
überschreibt Ihre Einstellungen für das jeweilige Feld (ganz praktisch, für Besondere Fälle).InformationsquelleAutor der Antwort saschoar
Bedenken, dein Beispiel ist ein Grenzfall. Wenn Sie haben eine Eigenschaft 'foo' seine getter sollte den Namen "getFoo", und wenn Sie eine Eigenschaft mit dem Namen 'foo_bar' seine getter sollte den Namen 'getFooBar', aber in deinem Beispiel sind Sie die Zuordnung eines boolean und Boolean haben spezielle Fall Namenskonventionen in java. Eine primitive Boolesche Eigenschaft namens online sollte eine get-Methode namens 'isOnline', NICHT 'getOnline' oder noch schlimmer 'getIsOnline'. Ein boolean wrapper-Objekt (z.B. Boolean), sollten Sie nicht Folgen Sie diesem speziellen Fall und einer Eigenschaft mit dem Namen 'online' haben sollte, eine get-Methode namens 'getOnline'.
Daher, dass die booleschen Eigenschaften mit 'ist' im Namen ist ein edge-Fall, wo Sie wollen, um Streifen aus diesem speziellen Präfix, während Ihre Konvertierung. In umgekehrter Richtung, Ihr code möglicherweise wollen untersuchen Sie das json-Objekt für beide ein raw-property-name als ein 'is_XXX" - version.
InformationsquelleAutor der Antwort Jherico
Ich denke, was Sie wollen, ist hier. Mithilfe von Anmerkungen können Sie sagen, GSON, dass die mySuperCoolField eigentlich heißt this_field_is_fun in die JSON-und Sie packen es richtig an. Zumindest ich denke, es funktioniert für die Deserialisierung zu.
Wenn das nicht funktioniert, können Sie verwenden Sie benutzerdefinierte JsonSerializer/JsonDeserializers, die gut funktionieren, aber Sie haben, um Sie zu aktualisieren nach änderungen in Ihrer Klasse haben (wie wenn Sie ein Feld hinzufügen). Sie verlieren die automatische Magie.
Die einfachste Sache zu tun (das wäre hässlich, aber sehr sauber und einfach, wenn der erste Vorschlag nicht funktioniert) wäre, einfach benennen Sie das Feld in einer Art und Weise zu machen GSON glücklich, und fügen Sie zusätzliche Zugriffsmethoden mit dem Namen, der dir gefällt, z.B.
InformationsquelleAutor der Antwort MBCook