首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改map中list中变量的类型?

如何更改map中list中变量的类型?
EN

Stack Overflow用户
提问于 2021-05-11 05:15:05
回答 1查看 51关注 0票数 0

Json只有整数和字符串。我有一个“列表”,里面的“地图”,我没有附加数据,因为它们可以是任何。问题是,我在这个“字符串”类型的“列表”中有一个日期,如何才能更改为“日期”类型?在代码list.each和map.each中,某一步的值将是字符串类型的日期值,我可以使用正则表达式检查日期,但如何将其更改为Date?map.put?

代码语言:javascript
复制
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
                    }
                }
            }

一个正则表达式,用于测试值是否会被日期屏蔽以更改类型。

代码语言:javascript
复制
if (values ==~ /^(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/){}
EN

回答 1

Stack Overflow用户

发布于 2021-05-13 08:15:03

不是最优的,但对于小型json应该是有效的。

代码语言:javascript
复制
import groovy.json.*

def JSON='''
{"a":[{"d1":"2021-02-25 18:56:13","s":"s123","i":456}]}
'''

def detectDates(Object o){
    if(o instanceof List)return o.collect{ detectDates(it) }
    if(o instanceof Map)return o.collectEntries{k,v-> [k,detectDates(v)] }
    if(o instanceof String && o==~/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)return Date.parse('yyyy-MM-dd HH:mm:ss',o)
    return o
}

def o = new JsonSlurper().parseText(JSON)

assert o.a[0].d1 instanceof String
o = detectDates(o)
assert o.a[0].d1 instanceof Date
println new JsonBuilder(o).toPrettyString()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67477773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档