json - 使用json4s将json中的字符串解析为java.time.LocalTime

标签 json scala java-time json4s

如何将 YYYY-MM-dd 字符串解析为 java.time.LocalDate?目前我尝试了以下方法:

  1. 导入 JavaTimeSerializers

throws Error JString cannot be converted to LocalDate

case class Dates(createdAt: LocalDate, updatedAt: LocalDate, startDate: LocalDate, endDate: LocalDate )
implicit val formats =  defaultFormats ++ org.json4s.ext.JavaTimeSerializers.all

implicit val formats =  defaultFormats ++ org.json4s.ext.JavaTimeSerializers.all

val input =
  """
    |{
    |  "createdAt": "1999-12-10",
    |  "updatedAt": "1999-12-16",
    |  "startDate": "2000-01-02",
    |  "endDate": "200-01-16"
    |}
  """.stripMargin

val result = read[Dates] { input }
  1. 覆盖DefaultFormats:

throws error found java.time.format.DateTimeFormatter expected java.text.SimpleDateFormat

implicit val formats = new org.json4s.DefaultFormats {
  override def dateFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd")
}

val input =
  """
    |{
    |  "createdAt": "1999-12-10",
    |  "updatedAt": "1999-12-16",
    |  "startDate": "2000-01-02",
    |  "endDate": "200-01-16"
    |}
  """.stripMargin

val result = read[Dates] { input }
  1. 尝试根据此处的示例定义CustomFormatter

Error Expected type was: (PartialFunction[org.json4s.JValue,java.time.LocalDate], PartialFunction[Any,org.json4s.JValue])

object LocalDateSerializer extends CustomSerializer[LocalDate](
  format => (
{
  case JString(str) => LocalTime.parse(str)
  case JNull => null
}
))

implicit val formats =  org.json4s.DefaultFormats ++ new LocalDateSerializer

最佳答案

对于第三个错误,您缺少第二个部分函数,请参阅:

ser: Formats => (PartialFunction[JValue, A], PartialFunction[Any, JValue])

所以你可能想这样做,比如:

  object LocalDateSerializer extends CustomSerializer[LocalDate](format => ({
    case JString(str) =>
      LocalDate.parse(str)
  }, {
    case date: LocalDate => JString(date.toString)
  }))

并且由于 LocalDate 默认模式是 yyyy-MM-dd,所以 "200-01-16" 这不是合法的时间,您可能想将其更改为 2000-01-16

关于json - 使用json4s将json中的字符串解析为java.time.LocalTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47880510/

相关文章:

scala - SBT 集成测试设置

Java LocalDate 如何将一年的最后一周作为第 53 周而不是新年的第一周?

java - DateTimeFormatter 一直不工作,错误?

Java 8 LocalDateTime 今天在特定时间

json - 基于JSON格式生成Symfony Doctrine2实体

scala - 使用 nth 的二维插值

java - 是否有人在 IntelliJ 中成功混合了 scala 和 java 文件

javascript - 获取特定字段的 json 数据并存储在文件中

json - 使用带有 AngularJS 的复选框过滤数组

java - 使用 Jersey 和 Jackson 从 JSON 解码 JAXB 带注释的类