2016-07-23 1 views
2

JSONにグルーヴィーオブジェクトを解析しようとしています。プロパティ名は、正しいキャメルケースの形式に従いません。私はこのGroovyのレターケースをJSONコンバータで保持する方法は?

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

を使用するとき、私は私が私のプロパティキーの先頭に大文字・デ・維持することができますどのようにこの

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

class Client { 
    String Name 
    Date Birthdate 
} 

得ましたか。

+0

あなたがゲレンデをオフに行きたい場合は...キャメルケースがあるおそらく最良の使用...ジャクソンのようなものを奇妙な形式を使用しています小文字の開始文字でノルム。特にgroovyの変数名の場合 –

+0

私はラクダのケースが標準であることを理解しています。しかし、私が取り組んでいるAPIは、これらの奇妙なフォーマットを定義しています! = / – ricardogobbo

答えて

0

あなたは標準的な命名規則を破っているので、それを自動的にキャメルケースに変換します。

あなたはキャメルケースを上書きする場合したがって、1つのオプションとして、内部で作成したマップではなく、実際のプロパティ名を取得するよりも、MetaProperty.javaクラスのgetName()メソッドを使用するカスタムマップを返すようにobject.properties別名object.getProperties()をオーバーライドするカスタムメソッドを記述しています。

したがって、実行する必要があるのは、オブジェクトをマップに変換するカスタム汎用メソッドを記述することだけです。

JSONとしてobjectを使用すると、jsonが返されます。

class Client { 
    String name 
} 

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

例えば

はここでマップ名のNでの首都であり、あまりにもJSONで資本を返されます。 お手伝い願います!

0

別のオプションは、注釈でgson serializerを使用することです: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 
関連する問題