【问题标题】:Convert Map Object from String "[a:12,b:[a:b,c:d]]"从字符串“[a:12,b:[a:b,c:d]]”转换地图对象
【发布时间】:2023-03-24 10:30:01
【问题描述】:

java(groovy)中是否有任何开箱即用的方法可以像这样转换字符串

String s = "[a:12,b:[a:b,c:d]]";

到带有键值对的 Map 对象。

更新:它在某种程度上类似于 Groovy:没有开箱即用的 stringToMap 吗?(Groovy: isn't there a stringToMap out of the box?)。不同之处在于这里的键是字符串类型的,这使得解析更容易,因为我已经通过执行.toString() 检索到提到的映射我无法通过回答的方法解析,因为我的字符串实际上包含我需要返回的日期字符串日期对象。所以很难解析整个字符串。

【问题讨论】:

  • 我不相信有直接的方法,但之前有人问过或多或少相同的问题 - stackoverflow.com/questions/2212606/…
  • 谁给你这样的“地图”?我打赌它是某个地方的 toString,你最好防止 使用某种形式的序列化,这实际上是理智的
  • 是的,我对地图做了 toString(),因为我需要它将它作为一个整体传递给控制器​​并将其转换为地图对象。

标签: java groovy


【解决方案1】:

我有一种方法可能会根据您的实际数据起作用。您的示例数据的问题是您提供了未引用的字符串 b 和 d 作为结构的一部分:

String s = "[a:12,b:[a:b,c:d]]";

如果你拥有的是真的

String s = "[a:12,b:[a:'b',c:'d']]";

String s = "[a:12,b:[a:1,c:2]]";

那么你可以这样做:

def map=Eval.me(s)

但是,eval 尝试将 b 和 d 解析为未在范围内定义的变量。

【讨论】:

    【解决方案2】:

    您可以将此字符串转换为类似 JSON 的格式,并对其进行简单解析:

    String s = "[a:12,b:[a:b,c:d]]";
    def result = new JsonSlurper().setType(JsonParserType.LAX).parseText(s.replaceAll('\\[', '{').replaceAll('\\]', '}'))
    

    【讨论】:

    • 谢谢,这正是我正在寻找的。​​span>
    猜你喜欢
    • 2021-12-16
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多