【发布时间】:2021-05-07 11:17:58
【问题描述】:
在我的 json 中有一个值为“01.05.2021 00:00:00”的字段,我需要将类型定义为日期,但显然由于引号将其定义为“字符串”。如何确保类型是“日期”而不是字符串?我可以将String更改为Date,但是如何在从JSON获取的列表中进行呢?
现在的例子: 值 01.05.2021 00:00:00 typeMap String 值 6 typeMap Integer
def getTypeDef(def value) {
(value instanceof BigDecimal) ? "Double" : value.getClass().simpleName
}
def list = jsonSlurper.parseText JSON
def typeMap = [:].withDefault { key -> "String" }
list.each { map ->
map.each { key, values ->
if (values != null) {
typeMap[key] = getTypeDef(values)
println('value ' + values + ' typeMap ' + typeMap[key])
//typeMap[key] = values.getClass().simpleName
}
}
}
def types = names.collect { name -> typeMap[name] }
我可以这样做,但问题是值仍然是字符串,而不是日期,但我会在 println 中得到 Date。
def getTypeDef(def value) {
if (value ==~ /^(0?[1-9]|[12][0-9]|3[01])[\\/\-.](0?[1-9]|1[012])[\\/\-.]\d{4}\s[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9]\u0024/){
(value instanceof String) ? "Date" : value.getClass().simpleName
}
else{
(value instanceof BigDecimal) ? "Double" : value.getClass().simpleName
}
}
【问题讨论】:
-
您将 JSON 解析为 POJO,其中每个字段都有一个声明的类型。日期字段还应使用日期格式进行注释,例如在你的情况下,这将是
"dd.MM.yyyy HH:mm:ss"或"MM.dd.yyyy HH:mm:ss"。 -
为什么不使用 LocalDateTime.parse 方法?
-
我不明白这是怎么做到的,如果代码很小,你能举个例子吗?
-
请显示
println('value ' + values + ' typeMap ' + typeMap[key])的输出 -
您的列表的确切格式是什么? (强类型?)
标签: groovy jsonslurper