此代码:
Map<String, Object> map = new HashMap<>();
map.put("now", new Date());
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.create();
String json = gson.toJson(map);
System.out.println(json);
产生类似
{"now":"2023-03-11T12:34:56.789Z"}
的东西
反之,撤消这样的动作:
Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());
无法生成输入数据 - 而是提供像
{"now":"2023-03-11T12:34:56.789Z"}
. 这样的输出
日期字符串保留为字符串,而不是转换回
Date
对象。
如何将字符串解析回
Map
以便 GSON 识别 日期字符串并将其解析回 Date
对象。
正则表达式模式
"\\d{1,4}-\\d{2}-\\d{2}T\\d{2}\\:\\d{2}\\:\\d{2}\\.\\d{3}Z"
与日期模式大致相关。
基本上,我需要通过配置告诉GSON: 如果字符串与正则表达式部分 (DATE_PATTERN) 匹配,则将其反序列化为日期。
注意:我知道反序列化为带有日期字段的类会正常工作,因为字段类型给了 GSON 一个提示。我需要 GSON 简单地根据字符串的格式来确定目标类型。