我々はそのような単純なことができて作業するScala 2.11.8
とPlay framework 2.5.8
プレイでJSONに列挙して地図を解析することができませんScalaの
データを使用します。
object EnumA extends Enumeration {
type EnumA = Value
val ONE, TWO, THREE = Value
}
case class NoWork(data: Map[EnumA.Value, String] = Map.empty)
そして、何私がアーカイブすることにありますNoWork
クラスをJson
に解析することができます。 Enumeration
の暗黙的なフォーマッタを用意する必要があることはわかっています。
私はこの解決策を見つけました:https://stackoverflow.com/a/15489179/1549135これを適用しました。
object NoWork {
implicit val enumAFormat = EnumUtils.enumFormat(EnumA)
implicit val jsonModelFormat = Json.format[NoWork]
}
をそしてそれは常にエラーで失敗します:
error: No implicit format for Map[EnumA.Value,String] available.
implicit val jsonModelFormat = Json.format[NoWork]
^
問題は何である次のように、これらの暗黙の提供
コンパニオンオブジェクトに見えますか?
data
のタイプをMap[String, String]
にテストして変更して、シリアル化が可能です。 Enum
自体もシリアル化可能ですので、Map
をEnum
タイプで修正するにはどうすればよいですか?
ありがとうございます!
編集
Pamuの答え
implicit val writes = new Writes[Map[EnumA.Value, String]] {
override def writes(o: Map[EnumA.Value, String]): JsValue = Json.toJson(o.map { case (a, b) => Json.parse(s"""{${Json.toJson(a)}:${Json.toJson(b)}}""")}.toList)
}
は明らかにこの状況のために働くだろうと、私は実際に私は、アプリケーション全体で使用することができ、他のMap[Enum, T]
のための一般的な解決策が必要になります。
を使用して変換されます。しかし、私が話したように、 'Enum'が正常に動作します。しかし、 'Map [Enum、String]'はそうではありません。 – Atais
@Atais ...答えを編集しました。あなたが期待しているものをチェックしてください。これが役に立ったと思っています – pamu
しかし、私はもともと約 – Atais