我正在使用Play JsPath
val jsonrecord = "{\"id\":111,\"zip\":\"123\"}"
case class record(id: Int, name: Int)
def validZip(name:String) = name.matches("""^[0-9]*$""")
def jsonextraction(json: JsValue): record = {
implicit val jsonread: Reads[record] = (
(JsPath \ "id").read[Int] and
(JsPath \ "zip").read[String](validZip)
) (record.apply _)
val result = json.as[record]
result
}
如何将name
字段字符串转换为Int json输入字段是zip is引号,如字符串"123“。
我尝试删除引号并将其设置为整数,
检查空值不应为空,如果为空,则尝试抛出异常,如错误记录
发布于 2018-05-30 07:00:38
您可以像这样映射到一个整数:
(JsPath \ "zip").read[String].map(_.toInt)
下面是一个最小的工作示例:
import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.libs.json.Reads._
case class record(id: Int, name: Int)
object record {
implicit val jsonread: Reads[record] = (
(JsPath \ "id").read[Int] and
(JsPath \ "zip").read[String](pattern("""^[0-9]*$""".r)).map(_.toInt)
)(record.apply _)
}
object PlayJson extends App {
val jsonrecord = """{ "id": 111, "zip": "123" }"""
println(Json.parse(jsonrecord).as[record])
}
https://stackoverflow.com/questions/50592131
复制相似问题