使用 json4s 将 json 中的字符串解析为 java.time.LocalTime
Parsing string in json to java.time.LocalTime using json4s
如何将 YYYY-MM-dd
的字符串解析为 java.time.LocalDate
?目前我尝试了以下方法:
- 进口
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 }
- 覆盖
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 }
- 尝试根据此处的示例定义
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
。
如何将 YYYY-MM-dd
的字符串解析为 java.time.LocalDate
?目前我尝试了以下方法:
- 进口
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 }
- 覆盖
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 }
- 尝试根据此处的示例定义
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
。