2013-08-13 15 views
8

jsonをPlayアプリケーション内でケースクラスとして抽出したいとします。 caseクラスの属性はcamelCaseとjsonのデータで定義されており、snake_caseに入っています。Play Jsonでsnake_case属性をcamelCaseとして読み取る

case class User(userId: Long, userName: String) 

とJSONがこの ようなものだ{ "USER_NAME": "ヴィシャル"、 "user_idは":67}

自動的にマッピングし、抽出を行うためにプレーJSONを指示する簡単な方法があり、注釈などを提供するのと同じように。

答えて

1

これはおそらくすぐには機能しないので、これを処理する追加のライブラリを探すなどの他の解決策を検討する必要があります。

再生にはJacksonが使用されます。 Javaでは、プロパティでJacksonの注釈org.codehaus.jackson.annotate.JsonPropertyを使用して、手動で名前を設定できます。 valueパラメータの引数がキーの名前として使用されます。

@JsonProperty("user_name") 
String userName; 

PlayでScalaを使用しても動作するのかどうかわかりません。あなたはthis questionケースクラスにジャクソンの注釈の他の例を見つけることができます

class User @JsonCreator()(@JsonProperty("user_id") val userId:Long, @JsonProperty("user_name") val userName:String) 

:このthread about Scala and Jacksonのコメントに基づいてデシリアライゼーションのための構文は次のようなものでなければなりません。

1

Play 2のJSON Inceptionを使用している場合は、いいえ、そうでない場合は、@JsonPropertyアノテーションを使用できます。

私はJSON Inceptionでこのような幸運のないさまざまな形式と構成のjerkson/jacksonアノテーションを使用してこの機能を利用しようとしていました。プレイJSON 2.Xについて

1

は、これはかなり古い質問ですが、私はそれのためにすべての答えを見つけられませんでしたので、私はプレイJSONのGithubリポジトリに行って、この見つかった:

implicit val config = JsonConfiguration(SnakeCase) 

implicit val userReads: Reads[PlayUser] = Json.reads[PlayUser] 

だから、今では公式に存在しているようですこの

https://github.com/playframework/playframework/blob/d96d42e4baa2261d0e0a9c36518f6921e247e402/documentation/manual/working/scalaGuide/main/json/code/ScalaJsonAutomatedSpec.scala#L128

+1

これを行う方法は非常に便利であるだけで、今後の2.6リリースで使用可能です。 [2017年4月〜5月の予定](https://docs.google.com/document/d/11sVi1-REAIDFVHvwBrfRt1uXkBzROHQYgmcZNGJtDnA/edit) –

関連する問題