Scala Play JSON 类型转换
Scala Play JSON Type conversion
我目前正在为 Play! 的类型转换而苦恼! Json Scala 库...
我有这样的数据:
val myJson = Json.parse(...)
val mapping = Map[String, Option(JsValue)](
"id" -> (myJson \ "Path" \ stringValue),
"num" -> (myJson \ "Path" \ intValue),
"precision" -> (myJson \ "Path" \ "floatValue")
)
此外,我有一个 Avro 架构,它定义了每个字段的数据类型,在本例中是:
- 编号:字符串
- 数字:整数
- 精度:浮点数
如果我现在遍历字段并像这样根据 Avro 架构检查类型(请注意,在这种情况下,字段是要获取的值的名称,例如 "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)
以下是我已经尝试过但没有用的转换方式(我有几种不同的映射,它们最终仍然包含 None 或给定类型的值):
floatVal.as[Float]
floatVal.as[JsNumber].as[Float]
floatVal.as[JsNumber].value.toFloat
Hi,
我目前正在为 Play! 的类型转换而苦恼! Json Scala 库...
我有这样的数据:
val myJson = Json.parse(...)
val mapping = Map[String, Option(JsValue)](
"id" -> (myJson \ "Path" \ stringValue),
"num" -> (myJson \ "Path" \ intValue),
"precision" -> (myJson \ "Path" \ "floatValue")
)
此外,我有一个 Avro 架构,它定义了每个字段的数据类型,在本例中是:
- 编号:字符串
- 数字:整数
- 精度:浮点数
如果我现在遍历字段并像这样根据 Avro 架构检查类型(请注意,在这种情况下,字段是要获取的值的名称,例如 "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)
以下是我已经尝试过但没有用的转换方式(我有几种不同的映射,它们最终仍然包含 None 或给定类型的值):
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>
,例如JsString
而不是 JsValue
.
在某些情况下,但并非总是如此,对于 Int 类型,它也会显示 JsString
...
为什么不将它们保留为 JsValue
?
Play! 的正确转换方法是什么? Json 类型?
谢谢
一切顺利
蒂姆
只是确保以适合我的方式进行更新。
在我的例子中,我只是自己立即进行了 JsString
、JsNumber
、...转换,这样框架就不会自行推断它的类型。
我目前正在为 Play! 的类型转换而苦恼! Json Scala 库...
我有这样的数据:
val myJson = Json.parse(...)
val mapping = Map[String, Option(JsValue)](
"id" -> (myJson \ "Path" \ stringValue),
"num" -> (myJson \ "Path" \ intValue),
"precision" -> (myJson \ "Path" \ "floatValue")
)
此外,我有一个 Avro 架构,它定义了每个字段的数据类型,在本例中是:
- 编号:字符串
- 数字:整数
- 精度:浮点数
如果我现在遍历字段并像这样根据 Avro 架构检查类型(请注意,在这种情况下,字段是要获取的值的名称,例如 "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)
以下是我已经尝试过但没有用的转换方式(我有几种不同的映射,它们最终仍然包含 None 或给定类型的值):
floatVal.as[Float]
floatVal.as[JsNumber].as[Float]
floatVal.as[JsNumber].value.toFloat
Hi,
我目前正在为 Play! 的类型转换而苦恼! Json Scala 库...
我有这样的数据:
val myJson = Json.parse(...)
val mapping = Map[String, Option(JsValue)](
"id" -> (myJson \ "Path" \ stringValue),
"num" -> (myJson \ "Path" \ intValue),
"precision" -> (myJson \ "Path" \ "floatValue")
)
此外,我有一个 Avro 架构,它定义了每个字段的数据类型,在本例中是:
- 编号:字符串
- 数字:整数
- 精度:浮点数
如果我现在遍历字段并像这样根据 Avro 架构检查类型(请注意,在这种情况下,字段是要获取的值的名称,例如 "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)
以下是我已经尝试过但没有用的转换方式(我有几种不同的映射,它们最终仍然包含 None 或给定类型的值):
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>
,例如JsString
而不是 JsValue
.
在某些情况下,但并非总是如此,对于 Int 类型,它也会显示 JsString
...
为什么不将它们保留为 JsValue
?
Play! 的正确转换方法是什么? Json 类型?
谢谢 一切顺利 蒂姆
只是确保以适合我的方式进行更新。
在我的例子中,我只是自己立即进行了 JsString
、JsNumber
、...转换,这样框架就不会自行推断它的类型。