web-dev-qa-db-ja.com

ScalaオブジェクトをJSONに変換

私はPlay Frameworkの最新バージョンを使用していますが、これはこのJson.toJson(obj)のようなJSON libです。しかし、データの構造が不明であるため、toJsonはScalaオブジェクトをJSONに変換できません。誰かがcase convertの使用を提案しましたが、ここではmy Scalaナレッジデータはデータベースからのものですが、テーブルの構造は不明です。

このような不明なデータ構造をJSONに変換するには、どこを作成すればよいですか?

16
Vilis

JSONにシリアル化する型の数が限られていることを考えると、これは機能するはずです。

object MyWriter {
  implicit val anyValWriter = Writes[Any] (a => a match {
    case v:String => Json.toJson(v)
    case v:Int => Json.toJson(v)
    case v:Any => Json.toJson(v.toString)
    // or, if you don't care about the value
    case _ => throw new RuntimeException("unserializeable type") 
  })
}

Anyをシリアル化するポイントで暗黙的な値をインポートすることにより、それを使用できます。

import MyWriter.anyValWriter
val a: Any = "Foo"
Json.toJson(a)
7
tehlexx

Json4sを使用すると、パッケージをインポートできます。

import org.json4s.DefaultFormats
import org.json4s.native.Serialization.write

次に、トレイト内に暗黙的な変数を作成します。

implicit val formats: DefaultFormats = DefaultFormats

そして最後に、メソッドでそれを使用します。

write(myObject)
0
Cassio