Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

ScalaのJSONライブラリであるCirceで余分なフィールドを持つJSONをデコードする

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に必要なフィールドだけ定義しておけば良いということでもある。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?