如何使snakeyaml和GStrings一起工作

时间:2016-01-30 19:39:45

标签: groovy snakeyaml

当我尝试使用snakeyaml从Groovy内插字符串中删除Yaml时,它最终会打印出一个类名。

例如:

@Grab(group='org.yaml', module='snakeyaml', version='1.16')

import org.yaml.snakeyaml.Yaml

Yaml yaml = new Yaml();
def a = "a"
def list = ["$a"]   
def s = yaml.dump(list)

打印:

- !!org.codehaus.groovy.runtime.GStringImpl
  metaClass: !!groovy.lang.MetaClassImpl {}

我猜测它与GStrings在使用时转换为Strings的事实有关,我怀疑snakeyaml使用某种内省来确定对象的类。

有没有比在所有GStrings上调用toString()更好的解决方案?

2 个答案:

答案 0 :(得分:2)

尝试创建一个新的Representer:

public class GroovyRepresenter extends Representer {
  public GroovyRepresenter() {
    this.representers.put(GString.class, new StringRepresenter());
  }
}

Yaml yaml = new Yaml(new GroovyRepresenter())
...

答案 1 :(得分:0)

您可以为变量添加类型信息

Yaml yaml = new Yaml();
def a = "a"
String aStr = "$a"
def list = [aStr]   
def s = yaml.dump(list)