string - Groovy:没有现成的 stringToMap 吗?

标签 string grails groovy map params

作为从 groovy 开始的 tcl 开发人员,我对 groovy 中的列表和 map 支持感到有些惊讶。也许我在这里遗漏了一些东西。

我习惯于在 tcl 中动态地在字符串、列表和数组/映射之间进行转换。在 tcl 中,类似

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

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

这将是一个很大的问题,因为我可以轻松地使用诸如 split 或 tokenize 命令之类的东西,但是因为序列化列表或映射不仅仅是“a:2,b:4”,所以解析起来有点困难。

似乎 griffon 开发人员使用 stringToMap 库( http://code.google.com/p/stringtomap/ ),但该示例也无法处理序列化映射。

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

干杯,
拉尔夫

PS:这是一个很好的问题,但我已经用 grails 标记了它,因为我需要这个功能用于 grails,我想通过 URL 传递 map

更新:这对我来说仍然是一个悬而未决的问题......所以这里有一些更新给那些有同样问题的人:
  • 当您将 Map 转换为 String 时,会出现 .toString()将导致在所有情况下都无法变回 map 的东西,而是 .inspect()会给你一个字符串,可以评估回 map !
  • 在 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() 方法......

    关于string - Groovy:没有现成的 stringToMap 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2212606/

    相关文章:

    C - 在函数中写入字符串。错误 :expected expression

    Java正则表达式排除文件路径中的点

    forms - Grails 数据绑定(bind)隐藏表单字段

    java - 使用 Shiro 通过 LDAP 对用户进行身份验证

    grails - Groovy GSP Grails数字格式替换

    grails - 部署时如何为Grails应用程序设置版本

    c - 读取简单数据声明并响应分配给该变量的内存量的程序

    javascript - 是否有一种 Javascript 方法可以实现嵌套括号的连接?

    grails - Cobertura Grails代码覆盖率

    groovy - Groovy 中的范围运算符不打印整个数字范围