32

2.10 の Scala モジュールを使用した Jackson シリアライゼーション/デシリアライゼーションの簡単な例を教えてもらえますか? フィールドごとの注釈や割り当てを必要としないリフレクションベースの JSON を探しています。

ケースクラスがある場合:

case class Person(name:String, age:Int)
val person = Person("Fred", 65)

だから彼らのgithubのreadmeから:

val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)

よし、次は…?p を JSON との間で変換するにはどうすればよいですか?

4

3 に答える 3

46

これを試してみてください:

val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)    

val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)

val person2 = mapper.readValue(json, classOf[Person])
println(person2)

編集

そうしないと機能しないため、必ずPersonクラスをトップレベルとして宣言してください。

于 2013-06-06T16:31:08.067 に答える
-1

JSON String to Case Class/Objectとを変換する汎用関数を作成しましたCase Class/Object to JSON String

build.sbtファイルに必要な SBT 依存関係:

name := "jackson-example"

scalaVersion := "2.12.11"

libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.10.1"
libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.10.1"

JSON 文字列からケース クラス/オブジェクトへ

def fromJson[T](json: String)(implicit m: Manifest[T]): Option[T] = {
    Try {
      lazy val mapper = new ObjectMapper() with ScalaObjectMapper
      mapper.registerModule(DefaultScalaModule)
      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
      mapper.readValue[T](json)
    } match {
      case Success(x) => Some(x)
      case Failure(err) => {
        logger.error("@@@@Got " + err.getMessage() + " while JSON to Object:--> " + json)
        None
      }
    }
  }

ケース クラス/オブジェクトから JSON 文字列へ

def toJson[T](obj: T)(implicit m: Manifest[T]): Option[String] = {
    Try {
      lazy val mapper = new ObjectMapper() with ScalaObjectMapper
      mapper.registerModule(DefaultScalaModule)
      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
      mapper.writeValueAsString(obj)
    } match {
      case Success(x) => Some(x)
      case Failure (err) => {
        logger.error("@@@@Got " + err.getMessage() + " while converting object  to JSON:--> " + obj)
        None
      }
    }
  }
于 2020-05-15T18:38:05.113 に答える