2014-09-19 56 views
0

我正在嘗試解析Groovy中的yaml文件。但是,當我將結果轉換爲Map對象時,我面臨着問題。在Groovy中進行類型轉換

這裏是我的邏輯

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() 

但是我得到錯誤的行: map = (Map) map.get(token) ,它說:

"org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'some value' with class 'java.lang.String' to class 'java.util.Map' error at line: 15".. 

在哪裏,我錯了?

+0

我建議你發佈文件你正試圖解析腳本準備嘗試。 – Opal 2014-09-19 09:39:20

+0

這是groovy腳本https://www.dropbox.com/s/3fvwte5137znmb0/GScript.gsh?dl=0。非常感謝 – Rahul 2014-09-19 09:50:45

+0

yaml文件本身也不錯。從它可能意味着的錯誤,你只是在你的yaml訪問一些「死衚衕」。 – cfrick 2014-09-19 10:11:21

回答

0

您提供的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 

請注意Code: **Static**在原來的亂糟糟的東西了。最後一級的所有按鍵需要:之後的空格(例如,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) } 

BTW:你不需要在常規導入java.util

+0

非常感謝。有用 – Rahul 2014-09-19 10:47:19