Yaml从配置文件中解析

时间:2012-01-23 07:47:53

标签: java parsing yaml classcastexception

这是我第一次使用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)

有人可以帮我调试一下。我在截止日期前跑了!! :(

2 个答案:

答案 0 :(得分:3)

YAML解析器似乎返回Map。所以你应该像这样使用它:

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

您使用的是什么特定的YAML解析器?

更新1:如果查看documentationload方法会返回ListMap,具体取决于你的YAML文件。由于您的YAML文件以键值映射(Users)而非数组(-)开头,因此load方法返回Map,这是适当的类型在这种情况下归还。

答案 1 :(得分: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