1

JSON を解析する必要があるとします (以下を参照)。

{
  成功: 真
  ステータスコード: 0
  ステータスメッセージ: 「わかりました」
  ペイロード { ... } // 実際のデータ
}

まず、「ステータス」フィールドを解析してインスタンスを取得していますcase class Status(以下を参照)。

ケースクラス Status(success: Boolean, code: Int, message: String)

val json = parse(text) // テキストは上記の JSON です

val statusList = {
    JObject(obj) <- json
    JField("成功", JBool(成功)) <- obj
    JField("コード", JInt(コード)) <- obj
    JField("メッセージ", JString(メッセージ)) <- obj
  } yield Status(成功、コード、メッセージ)

それは理にかなっていますか?

の型はstatusListですList[Status]。1つのStatusアイテムが含まれています。解析が失敗した場合、statusListは空です。好きじゃなくOption[Status]て欲しいからList[Status]

withList[Status]に簡単に変換できますが、直接取得したいと思います。Option[Status]headOptionOption[Status]

json4s最初に取得 Option[Status] せずにJSON を解析して取得できList[Status]ますか?

4

3 に答える 3

2

XPath に似た関数を以下と一緒に使用できますtoOption

val statusOpt = for {
    JBool(success) <- (json / "success").toOption
    JInt(code) <- (json / "code").toOption
    JString(message) <- (json / "message").toOption
  } yield Status(success, code, message)
于 2014-03-25T14:34:09.333 に答える