3

最近、Jerkson から json4s に切り替えましたが、これら 2 つのライブラリのデフォルトの逆シリアル化動作がまったく同じではないことがすぐにわかりました。

私たちが抱えている問題の 1 つは、数値フィールドが数値ではなく文字列として表される json 入力を受け取ることがあるということです。

//example json object with string representation of "id"
{
    "id" : "12545"
}


//example json object with number representation of "id"
{
    "id" : 12345
}

これらは、次のクラスに逆シリアル化する必要があります

case class example(id:Int)

これは、json を任意のクラスに逆シリアル化するための一般的な設定です

import org.json4s.native.Serialization._
import org.json4s._
import org.json4s.native.JsonMethods._

object Json {
    implicit val formats = DefaultFormats
    def parse[T](json:String)(implicit mf: Manifest[T]):T =  {
        org.json4s.native.JsonMethods.parse(input).extract[T]
    }
}

ただし、json オブジェクトを id の文字列表現で解析しようとすると、例外がスローされ、次のメッセージが表示されます。

offer に使用できる値がない id に使用できる値がない JString(12545) を int に変換する方法がわからない

文字列を整数に解析しようとする整数フィールドのカスタムリーダーを設定する方法を探していましたが、ユースケースをカバーするソリューションをまだ見つけていません。私たちが必要としているのは、レガシー アプリケーションをサポートするための一般的な包括的なソリューションです。

これを達成する方法を知っている人はいますか?

4

2 に答える 2