5

アンダースコア付きのjsonをケースクラスのcamelCaseフィールドにマップするにはどうすればよいですか?

import org.json4s.jackson.JsonMethods.parse
import org.json4s.DefaultFormats

object Testing {
  implicit val formats = DefaultFormats.withBigDecimal

  def test = {
    val json = parse("""{"some_field":"a value"}""")
    json.extract[ThingDTO]
  }
}

case class ThingDTO(someField:String)

私が得るエラー:

someField に使用できる値がありません java.lang.String に変換できる値が見つかりませんでした

4

2 に答える 2

10

文書化されていないようです (または、少なくとも探していたときに見逃していました) がcamelizeCase、解析された Json で使用できるメソッドがあります。私はソースコードで偶然それを見つけ、私が作業していたいくつかのスネークケース Json で試してみました。そして、見よ、ラクダ化されたキー名を取得しました。

したがって、1年後にこの質問に出くわした人は、OPのコードを次のように変更すると機能します。

import org.json4s._
import org.json4s.DefaultFormats
import org.json4s.native.JsonMethods._

object Testing {
  implicit val formats = DefaultFormats.withBigDecimal

  def test = {
    val json = parse("""{"some_field":"a value"}""").camelizeKeys
    json.extract[ThingDTO]
  }
}

case class ThingDTO(someField:String)
于 2015-07-16T09:25:54.493 に答える
0

現在、唯一のオプションはバックティックまたはトランスフォーム関数を使用することだと思います。http://json4s.org/の値の抽出セクションを参照してください。

よろしくお願いします

于 2014-08-07T13:42:39.803 に答える