加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy:是不是有一个stringToMap开箱即用?

发布时间:2020-12-14 16:37:16 所属栏目:大数据 来源:网络整理
导读:作为一个以groovy开始的tcl开发人员,我对groovy中的列表和地图支持感到有点惊讶。也许我在这里遗漏了一些东西。 我习惯于在tcl中的字符串,列表和数组/映射之间进行转换。在tcl中,像 "['a':2,'b':4]".each {key,value - println key + " " + value} 将是可
作为一个以groovy开始的tcl开发人员,我对groovy中的列表和地图支持感到有点惊讶。也许我在这里遗漏了一些东西。

我习惯于在tcl中的字符串,列表和数组/映射之间进行转换。在tcl中,像

"['a':2,'b':4]".each {key,value -> println key + " " + value}

将是可能的,在groovy中,每个命令遍历字符串的每个字符。

这可能是一个很大的问题,我可以很容易地使用像split或tokenize命令这样的东西,但是由于序列化的列表或地图不仅仅是“a:2,b:4”,所以解析有点困难。

看起来,griffon开发人员使用了一个stringToMap库(http://code.google.com/p/stringtomap/),但该示例也无法应对序列化的地图。

所以我的问题现在是:在groovy中解析地图或列表的最好方法是什么?

干杯,
拉尔夫

PS:这是一个简单的问题,但是我用grails标记了它,因为我需要这个功能,我想通过URL传递地图

更新:这仍然是我的一个开放的问题…所以这里有一些更新为那些谁有同样的问题:

>当您将Map转换为String时,.toString()将导致在所有情况下无法转回地图的东西,但.inspect()将为您提供一个可以被评估回到一张地图!
>在Grails中,有一个.encodeAsJSON()和JSON.parse(String) – 都很好,但是我还没有检查出解析器将对JSON函数做什么(可能的安全问题)

解决方法

不完全是原生的groovy,但有用于序列化到JSON:

import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

def map = ['a':2,'b':4 ]
def s = new JsonBuilder(map).toString()
println s

assert map == new JsonSlurper().parseText(s)

与元编程:

import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

Map.metaClass.toJson   = { new JsonBuilder(delegate).toString() }
String.metaClass.toMap = { new JsonSlurper().parseText(delegate) }

def map = ['a':2,'b':4 ]
assert map.toJson() == '{"a":2,"b":4}'
assert map.toJson().toMap() == map

不幸的是,不可能覆盖toString()方法…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读