15

Play アプリケーション内で json を case クラスとして抽出したいと考えています。case クラスの属性は camelCase で定義され、json データは snake_case で提供されます。

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

json は次のようになります {"user_name":"Vishal","user_id":67}

いくつかの注釈を提供するなど、自動的にマッピングと抽出を行うように play json に指示する簡単な方法はありますか?

4

4 に答える 4

13

これはかなり古い質問ですが、答えが見つからなかったので、Play 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

于 2016-10-21T09:57:48.983 に答える
1

この問題の公式の解決策については、@GlauberCampinho の回答を参照してください
。これは、この回答を書いている時点では存在しませんでした。


Play は Jackson を使用します。Java では、org.codehaus.jackson.annotate.JsonPropertyプロパティで Jackson アノテーションを使用して、名前を手動で設定できます。パラメータの引数はvalue、キーの名前として使用されます。

@JsonProperty("user_name")
String userName;

これが Scala を使用する Play でも機能するかどうかはわかりません。Scala と Jackson に関するこのスレッドのコメントに基づいて、逆シリアル化の構文は次のようになります。

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

この質問のケース クラスでジャクソン アノテーションの別の例を見つけることができます。

于 2013-08-13T13:09:28.257 に答える
1

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

私はこれをJSON Inceptionで数日間動作させようとしましたが、ジャークソン/ジャクソンアノテーションのさまざまな形式と構成を使用して、そのような運はありませんでした!

于 2013-08-26T03:06:22.347 に答える