Как изменить String на Int в Json Parser в scala

Я использую 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, это кавычки, такие как строка «123».

Я пытаюсь удалить кавычки и сделать его целым,

проверка пустых значений, он не должен быть пустым, если он пуст, попытка выдать исключение, например, плохую запись


person Nathon    schedule 29.05.2018    source источник


Ответы (1)


Вы можете просто сопоставить целое число следующим образом:

(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])
}
person Mario Galic    schedule 29.05.2018
comment
Спасибо, он работает, но не проверяет пустые значения, - person Nathon; 30.05.2018
comment
Я также пытаюсь проверить пустые значения для поля zip. - person Nathon; 30.05.2018
comment
@Nathon Замените * на + в регулярном выражении следующим образом: """^[0-9]+$""".r - person Mario Galic; 30.05.2018