2012-01-23 99 views
2

這是我第一次使用YAML解析器和我目前停留在這一點上YAML解析從配置文件

我有去像

Users 
-Name:A 
    Id : x 
    Addr:10.0.0.1 
-Name:B 
    Id :y 
    Addr:10.0.0.2 

HomeAddress 
City:bla bla 
Country:bla bla 

Office Address 
City:abchd 
Country:bha bha ba 

一個配置文件,所以我認爲解析它的最好方法是擁有這樣的列表。

List<Map<String, obj>> Object = (List<Map<String, obj>>) yaml.load(input); 

目標是通過指定字符串來訪問對象。喜歡用戶名A,我可以獲得他的ID和IPAddr(這是我目前最重要的)。但是當我嘗試這個聲明時,我得到了這樣的錯誤

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.List 
    at Message.MessagePasser.<init>(MessagePasser.java:34) 

有人可以幫我調試這個。我限期運行!! :(

回答

3

的YAML解析器似乎返回Map所以,你應該這樣使用它:

Map config = (Map) yaml.load(input); 
Map usersConfig = config.get("Users"); 

還什麼特別YAML解析器您使用

更新1:如果你看看documentation,該load方法要麼返回一個ListMap取決於你的YAML文件的內容,當你的YAML文件,一鍵 - 值映射開始(Users)而不是數組(-),則load方法將返回Map,這是在此情況下要返回的適當類型。

+0

我使用的是SnakeYaml分析器 – ExceptionHandler

+0

請參閱!更新的答案。 – Behrang

+0

謝謝你的澄清。把你的小技巧修改爲這個,我修改了我的代碼,像'Map obj =(Map )yaml.load(input);'但是,儘管如此,我有一個錯誤,它不能將java.util.ArrayList強制轉換爲NodeIP類型(這是我定義的類)。所以你能提出一些改變嗎? – ExceptionHandler

1

1)檢查您的YAML這裏的有效性:http://instantyaml.appspot.com/

2)你的文件應該是這樣的:(介意空格)

Users : 
- Name : A 
    Id : x 
    Addr : 10.0.0.1 
- Name : B 
    Id : y 
    Addr : 10.0.0.2 
+1

您的驗證器不再工作,這是另一個:http://www.yamllint.com/。此外,良好的格式似乎刪除關鍵字之間的空格,':'和' - '應該在一個空行上,屬性出現在CR LF上。 – Alex