Groovy中的类型转换

Groovy中的类型转换,groovy,Groovy,我试图在Groovy中解析yaml文件。然而,我在将结果键入Map对象时面临这个问题 这是我的逻辑 import org.yaml.snakeyaml.Yaml import java.util.Map Reader reader = null int tokenCount = 0 def Map map = null StringTokenizer st = new java.util.StringTokenizer("Country.State.City", ".")

我试图在Groovy中解析yaml文件。然而,我在将结果键入Map对象时面临这个问题

这是我的逻辑

import org.yaml.snakeyaml.Yaml
import java.util.Map        
Reader reader = null 
int tokenCount = 0
def Map map = null 
StringTokenizer st = new java.util.StringTokenizer("Country.State.City", ".") 
reader = new FileReader("filepath") 
String val = null 
Yaml yaml = new Yaml() 
map = (Map) yaml.load(reader) 
tokenCount = st.countTokens() 
for (i=1;  i < tokenCount;  i++) {
  String token = st.nextToken() 
  map = (Map) map.get(token)
}
val = map.get(st.nextToken()).toString()

哪里出错了?

您提供的yaml文件在语法上不正确。这是一个固定版本:

location: C:\\Users\\amah11\\Desktop\\New folder
type: hi
Header:
    Code:
        Start: 0
        End: 2
        value: H00
    Owner:
        Start: 3
        End: 5
        value: AIM
    User:
        Start: 6
        End: 8
        Value: AIM
    number: 1
请注意,原始代码中的代码:**静态**会把事情搞砸。最后一级上的所有键都需要在:后留一个空格,例如:Start:3错误

实际的错误消息是:

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Static Start:0 End:2 value:H00' with class 'java.lang.String' to class 'java.util.Map'
这很清楚地表明,原始文件有问题

你可能想考虑使用一个编辑器,它可以立即检测这样的错误。 原始代码的替代方法是在标记器上使用inject:

def map = new Yaml().load(new FileReader("cardconfig.yml"))
println new StringTokenizer('Header.Code.End', '.').inject(map) { r, s -> r.get(s) }

顺便说一句:您不需要在groovy中导入java.util。

我建议您发布您试图解析的文件以及准备尝试的脚本。下面是groovy脚本。非常感谢您的帮助yaml文件本身也会很好。这个错误可能意味着,您只是在访问yaml中的某个死胡同。使用诸如Header:Code:end之类的伪yaml文件:“This is the end”确实有效。不,它看起来不是死胡同。我可以打印字符串map.gettoken。只有当我尝试键入cast-to-Map时,它才会失败。链接到示例yaml文件。谢谢
def map = new Yaml().load(new FileReader("cardconfig.yml"))
println new StringTokenizer('Header.Code.End', '.').inject(map) { r, s -> r.get(s) }