java - 将 json 字符串转换为日期对象

标签 java json spring-boot jackson

我有一个场景,我需要将动态属性以用户使用休息服务给出的 HashMap 的形式存储到数据库中。该动态属性定义为

HashMap<String, Object> attr = new HashMap<>();

现在,我必须根据业务逻辑将对象转换为其各自的运行时数据类型。到目前为止,我能够成功转换字符串、数字,但 Date 造成了麻烦。这是我的转换逻辑。

input = attr.get(label);
if (input instanceof String) {
      // logic 1
 } 
else if (input instanceof Number) {
      // logic 2
 }
else if (input instanceof Date)  {
      // logic 3
 } 

问题是,当以任何日期格式(在我的例子中为 zulu 格式)给出日期时,jacksonjson 转换器无法解析它并抛出错误,指出无法解析输入字符串。 我知道它是一个 Date 对象。我本可以编写一个 JsonDeserializer 并用它注释 Date 对象,但由于它是 HashMap 中的一个 Object > 我应该如何实现这一目标。

我还 try catch 该日期字符串并使用 SimpleDateFormat 解析它,但失败了,因为异常发生在该逻辑之前。

最佳答案

如果您要从 json 解析日期,您可能应该这样做。在 JSON 中,您的日期是字符串。您必须使用 SimpleDateFormat 将日期字符串转换为实际日期格式。它不会找到输入实例日期,并且您无法将 json 解析为实际日期。例如,如果您的 json 如下所示,

{'name':'firstname','date':'14/02/2019'}

您现在可以像这样将日期转换为实际日期

SimpleDateFormat formatter1=new SimpleDateFormat("dd/MM/yyyy");


Date date1=formatter1.parse(input); //here input is taken from your case which represent date  

关于java - 将 json 字符串转换为日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54683445/

相关文章:

spring-boot - spring boot 自定义错误页面在服务器上部署时不呈现

mysql - 如何在docker compose中将spring应用程序与mysql通信?

java - Eclipse 开发 - 根据 FieldEditorPreferencePage 内其他 FieldEditor 的新值更改 FieldEditor

java - 如何保存最后一个 session 的变量值(程序退出)

java - Java接口(interface)的问题

ruby-on-rails - Rails 中的 ActiveModel::Serializer - JSON 结果中忽略的序列化程序方法

java - JSON 单值数组

java - 在 amazon s3 java 中删除文件、目录和存储桶

jquery - 语法错误: missing ; before statement on JSONResponse

java - 实现 oneToMany 关系的最佳实践是什么?