私は現在、Play!のタイプ変換に苦労しています。Scala Play JSONタイプ変換
またval myJson = Json.parse(...)
val mapping = Map[String, Option(JsValue)](
"id" -> (myJson \ "Path" \ stringValue),
"num" -> (myJson \ "Path" \ intValue),
"precision" -> (myJson \ "Path" \ "floatValue")
)
、私はこのケースでは、それはだ、各フィールドのデータ型を定義アブロスキーマを持っています:
- IDを次のようになりScalaのためのJSONライブラリ...
私はデータを持っています:文字列
- NUM:のInt
- 精度:フロート
私は今、フィールドを反復処理し、この場合には、そのフィールドを(このようなアブロスキーマに対してタイプをチェックします取得する値の名前である場合には、例:「id」):
...
case Schema.Type.STRING => mapping.getOrElse(field, None) match {
case Some(stringVal: JsValue) => stringVal.as[String]
case None => null
}
case Schema.Type.INT => mapping.getOrElse(field, None) match {
case Some(intVal) => intVal.as[Int]
case None => null
}
case Schema.Type.FLOAT => mapping.getOrElse(field, None) match {
case Some(floatVal) => floatVal.as[Float]
case None => null
}
...
私はいつもこのエラーを取得:
[org.apache.kafka.streams.processor.internals.StreamThread] - Streams application error during processing in thread [StreamThread-1]:play.api.libs.json.JsResultException: JsResultException(errors:List((,List(JsonValidationError(List(error.expected.jsnumber),WrappedArray())))))
(注:もちろんerror.expected.jsnumberも時々jsstringすることができます)。ここ
は、私はすでに試した変換の方法がありますそして、(私は最終的にはまだなしまたは指定された型の値のいずれかを含まないマッピングのいくつかの異なるを持って)動作しませんでした:
floatVal.as[Float]
floatVal.as[JsNumber].as[Float]
floatVal.as[JsNumber].value.toFloat
Hi,
私は、CuよPlayのタイプ変換に激しく苦しんでいます!
またval myJson = Json.parse(...)
val mapping = Map[String, Option(JsValue)](
"id" -> (myJson \ "Path" \ stringValue),
"num" -> (myJson \ "Path" \ intValue),
"precision" -> (myJson \ "Path" \ "floatValue")
)
、私はこのケースでは、それはだ、各フィールドのデータ型を定義アブロスキーマを持っています:
- IDを次のようになりScalaのためのJSONライブラリ...
私はデータを持っています:文字列
- NUM:のInt
- 精度:フロート
私は今、フィールドを反復処理し、この場合には、そのフィールドを(このようなアブロスキーマに対してタイプをチェックします取得する値の名前である場合には、例:「id」):
...
case Schema.Type.STRING => mapping.getOrElse(field, None) match {
case Some(stringVal: JsValue) => stringVal.as[String]
case None => null
}
case Schema.Type.INT => mapping.getOrElse(field, None) match {
case Some(intVal) => intVal.as[Int]
case None => null
}
case Schema.Type.FLOAT => mapping.getOrElse(field, None) match {
case Some(floatVal) => floatVal.as[Float]
case None => null
}
...
私はいつもこのエラーを取得:
[org.apache.kafka.streams.processor.internals.StreamThread] - Streams application error during processing in thread [StreamThread-1]:play.api.libs.json.JsResultException: JsResultException(errors:List((,List(JsonValidationError(List(error.expected.jsnumber),WrappedArray())))))
(注:もちろんerror.expected.jsnumberも時々jsstringすることができます)。ここ
は、私はすでに試した変換の方法があります
floatVal.as[Float]
floatVal.as[JsNumber].as[Float]
floatVal.as[JsNumber].value.toFloat
floatVal.as[String].value.toFloat
floatVal.as[JsString].value.toString.toFloat
floatVal.as[String].toFloat
floatVal.as[String].value.toFloat
floatVal.as[JsString].value.toString.toFloat
floatVal.as[JsString].as[String].toFloat
floatVal.as[JsString].as[String].value.toFloat
floatVal.as[JsString].as[String].value.toString.toFloat
いくつか:と(私は最終的にはまだなしまたは指定された型の値のいずれかを含まないマッピングのいくつかの異なるを持って)動作しませんでしたどのようにすべてのタイプの問題があるのかは、いくつかのケースでのみですが、私はそれらを持っています...
また、タイプがJsValue
であっても、デバッガで見ると、タイプはJs<type>
、例えばJsValue
の代わりにJsString
です。いくつかの場面で
は、しかし常に、それはまた、int型のためJsString
を表示...
なぜそれがJsValue
としてそれらを保持しませんか?
Playを変換する正しい方法は何ですか。 Jsonタイプ?
は ティム
最小の再生装置に焦点を当ててください。そこに問題がかなり広がっています – cchantep
@cchantep私は質問をさらに指定しなければならないヒントを教えてもらえますか?一般的には、プレーフレームワークが 'Int'値を暗黙的に 'JsString'値に変換して実際の' Int'値に変換したいときにエラーをスローするときに、変換をどのように処理するのかという疑問があります –