带有多种类型的json字符串Map [String,Object]

时间:2015-05-19 06:32:01

标签: java json jackson

我有这个json字符串:

{
  "startDate" : "2014-12-17T14:31:40Z",
  "name" : "Izek",
  "age" : 12
}

当我将其与杰克逊转换为Map[String, Object]时,startDate的类型为String我如何告诉杰克逊将其转换为DateTime类型?

3 个答案:

答案 0 :(得分:4)

您需要在objectMapper中显式设置数据格式。您可以参考Date format Mapping to JSON Jackson了解更多详情。或者,您可以将其作为http://java.dzone.com/articles/how-serialize-javautildate

执行

答案 1 :(得分:1)

您是否考虑过自定义地图反序列化程序?您可以尝试在那里解析日期。如果事先不知道,你可能会在这里遇到性能打击。

答案 2 :(得分:1)

我找到了办法。 定义我自己的UntypedObjectDeserializer并在std.UntypedObjectDeserializer方法中扩展deserialize

if (currentToken == JsonToken.VALUE_STRING) {
   if (_stringDeserializer != null) {
      return _stringDeserializer.deserialize(jp, ctxt)
   }
   String text = jp.getText();
   if (dateTimeFormatRegex.match(text) {
      return toDateTimeObject(text);
   } else {
      return text;
   }
}
return super.deserialize(jp, ctxt)

public DateTime toDateTimeObject(String text) {
     dateTimeFormatter.parseDateTime(text)
}