当我尝试使用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()
更好的解决方案?
答案 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)