以下の内容はhttps://blog.3qe.us/entry/2025/11/07/020200より取得しました。


ScalaのupickleでオプショナルなフィールドをパースするにはNone defautを設定しておくと良い

tl;dr

deserialize serialize
デフォルト値がある フィールドがない場合はデフォルト値にフォールバックする 値がデフォルトと同じならフィールドごと削除する
デフォルト値がない フィールドがない場合は例外を投げる 値をセットする
//> using dep com.lihaoyi::upickle::4.4.1

import upickle.default._

case class Person(
    name: String,
    age: Int,
    email: Option[String] = None,
    address: Option[String] = None,
    phone: Option[String] = None
)

object Person {
  implicit val rw: ReadWriter[Person] = macroRW
}

こんな感じに設定しておくと、

{ "name": "windymelt", "age": 32 }

こういうJSONをパースできるようになります。存在しないフィールドはNoneにフォールバックします。

//> using dep com.lihaoyi::upickle::4.4.1

import upickle.default._

case class Person(
    name: String,
    age: Int,
    email: Option[String],
    address: Option[String],
    phone: Option[String]
)

object Person {
  implicit val rw: ReadWriter[Person] = macroRW
}

このようにdefault parameterを設定していないと、

Caused by: upickle.core.Abort: missing keys in dictionary: email, address, phone

例外を吐いてしまいます。

default parameterを指定しないときは、値があるかnullか、という状況を想定しているときに使うと良さそう。

参考文献

stackoverflow.com

com-lihaoyi.github.io




以上の内容はhttps://blog.3qe.us/entry/2025/11/07/020200より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14