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()将为您提供一个可以被评估回到一张地图! 解决方法
不完全是原生的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()方法… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |