Как изменить String на Int в Json Parser в Scala - PullRequest
0 голосов
/ 29 мая 2018

Я использую 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".

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

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

1 Ответ

0 голосов
/ 30 мая 2018

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

(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])
}
...