ScalaでPlayフレームワーク(特にPlay v2.3.x)でPOJOまたはクラスインスタンスをJSONに変換する方法を教えていただけますか?
たとえば、次のようなコードがあります。
case class Foo(name: String, address: String)
def index = Action {
request => {
val foo = Foo("John Derp", "Jem Street 21") // I want to convert this object to JSON
Ok(Json.toJson(foo)) // I got error at here
}
}
エラーメッセージ:
com.fasterxml.jackson.data bind.JsonNodeのインスタンスを書き込めません HTTPレスポンスへ。定義してみてください Writeable [com.fasterxml.jackson.databind.JsonNode]
更新: 上記のエラーは、間違ったインポートが原因であることがわかりました Json
クラス、それは次のようになります: import play.api.libs.json.Json
。ただし、以下の暗黙的な問題でエラーが発生します。
読みました このチュートリアル、しかし、私が暗黙的にしようとしたとき Writes[Foo]
コード:
implicit val fooWrites: Writes[Foo] = (
(JsPath "name").write[String] and
(JsPath "address").write[String]
)(unlift(Foo.unapply))
私は持っている Can"t resolve symbol and
そして Can"t resolve symbol unlift
Intellijのエラー。また、チュートリアルのコードは、オブジェクトをJSONに変換するためだけに複雑に見えます。これを行うためのより簡単な方法があるのでしょうか。
回答:
回答№1の場合は7あなたは Writes[Foo]
を使用してインスタンス Json.writes
:
implicit val fooWrites = Json.writes[Foo]
この暗黙のスコープを持つことは、変換する必要があるすべてです Foo
JSONへ。文書を見る ここに そして ここに JSONの読み取り/書き込みの詳細については。
回答№2の場合は1
2番目の問題- Can"t resolve symbol and
-は Intellijのバグ Scalaプラグインのバージョン1.3で導入されました。 Scalaプラグインのバージョン1.3.3では、回避策があります-設定チェックボックスを設定します:
言語とフレームワーク> Scala>コア(デフォルト)タブ>古いを使用 暗黙的な検索アルゴリズム