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

作为一个以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()方法

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...