gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:55:03 25 4
gpt4 key购买 nike

作为从 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com