2016-07-23 21 views
2

Ich versuche ein grooviges Objekt zu JSON zu analysieren. Die Eigenschaftennamen folgen nicht dem korrekten Camel-Case-Formular.Wie wird der Groß- und Kleinschreibung in JSON Converter-Methode in Groovy beibehalten?

class Client { 
    String Name 
    Date Birthdate 
} 

Wenn ich diese

Client client = new Client(Name: 'Richard Waters', Birthdate: new Date()) 
println (client as JSON).toString(true) 

Ich habe diese

"client": { 
     "name": 'Richard Waters', 
     "birthdate": "2016-07-22T03:00:00Z", 
} 

Wie kann ich de Versalien halten Beginn meiner Eigenschaften Schlüssel?

+0

Sie sind eine seltsame Format ... Wahrscheinlich am besten Gebrauch etwas wie Jackson, wenn Sie Piste gehen wollen ... Camel Fall die Norm, mit Kleinbuchstaben Anfangsbuchstaben. Speziell für variable Namen in groovigen –

+0

verstehe ich, dass Camel Case die Norm ist. Aber die API, an der ich arbeite, definiert dieses seltsame Format! = / – ricardogobbo

Antwort

0

Nun, Sie brechen Standardnamenskonventionen und konvertieren es daher automatisch in camel case.

Wenn Sie also das Kamel Fall außer Kraft setzen möchten, ist eine Option, Ihre eigene Methode schreiben, die object.getProperties() aka object.properties überschreibt eine benutzerdefinierte Karte zurückzukehren, wie intern die erstellte Karte getName() Methode der MetaProperty.java-Klasse verwendet, anstatt die Immobilien Namen bekommen .

Daher müssen Sie nur eine benutzerdefinierte generische Methode schreiben, die Ihr Objekt in map konvertiert.

Und dann, wenn Sie Objekt als JSON verwenden, gibt es erwartete Json zurück.

Zum Beispiel

class Client { 
    String name 
} 

Client client = new Client(name: 'Richard Waters') 
println (["Name":"test"] as grails.converters.JSON) 

Hier in N Karte Namens ist Hauptstadt und wird auch Kapital in json zurückgegeben. Hoffe es hilft !!

0

Eine weitere Option ist ein gson serializer mit Anmerkungen zu verwenden: https://google.github.io/gson/apidocs/com/google/gson/annotations/SerializedName.html

@Grab('com.google.code.gson:gson:2.7+') 
import com.google.gson.Gson 
import com.google.gson.annotations.SerializedName 

class Client { 
    @SerializedName("Name") 
    String name 

    @SerializedName("Birthdate") 
    Date birthdate 
} 

def client = new Client(name: 'John', birthdate: new Date()) 

def strJson = new Gson().toJson(client) 
println strJson