ScalaのJSONライブラリであるCirceは、JSONをパースしてさらにcase classへと変換してくれる機能があるけれど、余分なフィールドがJSONに生えていたらどうなるのか気になったので試してみた。
build.sbt
依存性は以下の通り。
scalaVersion := "3.2.2" libraryDependencies ++= Seq( "org.scastie" %% "runtime-scala" % "1.0.0-SNAPSHOT", "io.circe" %% "circe-core" % "0.14.5", "io.circe" %% "circe-parser" % "0.14.5", "org.typelevel" %% "cats-core" % "2.9.0", "io.circe" %% "circe-generic" % "0.14.5" )
実験
以下のようなコードで実験する:
import io.circe.* import io.circe.syntax.* import io.circe.generic.auto.* import io.circe.parser.* case class Foo(bar: String, buzz: Int) val f = """{"foo": 3.14, "bar": "barvalue", "buzz": 42}""" // it has extra field val parsed = decode[Foo](f) parsed
結果
ちゃんとデコードしてくれた。余分なフィールドは単純に無視されるようだ。
Right(Foo(barvalue,42)): scala.util.Either[io.circe.Error, Foo]
言い換えると、CirceでJSONをデコードしたいときは、case classに必要なフィールドだけ定義しておけば良いということでもある。