从字符串转换地图对象" [a:12,b:[a:b,c:d]]"

时间:2016-09-23 03:55:55

标签: java groovy

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()检索了提到的地图我无法通过应答方法解析,因为我的字符串实际上包含我需要它的日期字符串回溯对象。因此很难解析整个字符串。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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解析为范围中未定义的变量。