在groovy中使用eval

发布于 2024-09-25 10:46:29 字数 360 浏览 5 评论 0原文

如何在 groovy 中使用 eval 来评估以下字符串:

{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}

所有列表项和 keyval 都是一个字符串。

执行 Eval.me("{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}") 给出以下错误:

不明确的表达式可能是无参数闭包表达式或隔离的开放代码块; 解决方案:添加显式的闭包参数列表,例如{it -> ...},或者通过给它一个标签来强制将其视为开放块,例如 L:{...} at

I Want to get HashMap

How can I use eval in groovy to evaluate the following String:

{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}

All the list items and keyval is a String.

doing Eval.me("{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}") is giving me the following error:

Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
solution: Add an explicit closure parameter list, e.g. {it -> ...}, or force it to be treated as an open block by giving it a label, e.g. L:{...} at

I want to get HashMap

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港巷口少年归 2024-10-02 10:46:29

有没有办法获取JSON格式的数据?然后,您可以使用此处提到的解析器之一。

Is there no way you can get the data in JSON format? Then you could just use one of the parsers mentioned here.

日久见人心 2024-10-02 10:46:29

可以通过翻译一些字符来解析该字符串,并编写自己的绑定以在 Groovy 尝试查找变量名称时返回变量名称,如下所示

class Evaluator extends Binding {
  def parse( s ) {
    GroovyShell shell = new GroovyShell( this );
    shell.evaluate( s )
  }
  Object getVariable( String name ) { name }
}

def inStr = '{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}'
def inObj = new Evaluator().parse( inStr.tr( '{}=', '[]:' ) )

println inObj

: 脆弱的解决方案,并以更友好的格式获取数据(正如@Stefan建议的那样)绝对是最好的方法......

You can parse that string by translating some of the characters, and writing your own binding to return variable names when Groovy tries to look them up, like so:

class Evaluator extends Binding {
  def parse( s ) {
    GroovyShell shell = new GroovyShell( this );
    shell.evaluate( s )
  }
  Object getVariable( String name ) { name }
}

def inStr = '{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}'
def inObj = new Evaluator().parse( inStr.tr( '{}=', '[]:' ) )

println inObj

But this is a very brittle solution, and getting the data in a friendlier format (as suggested by @Stefan) is definitely the best way to go...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文