Java 从配置文件进行Yaml解析

Java 从配置文件进行Yaml解析,java,parsing,yaml,classcastexception,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<Stri

这是我第一次使用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);
List对象=(List)yaml.load(输入);
目标是通过指定字符串来访问对象。像用户名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)
线程“main”java.lang.ClassCastException中的异常:java.util.LinkedHashMap不能强制转换为java.util.List 在Message.MessagePasser.(MessagePasser.java:34)
有人能帮我调试一下吗。我在赶最后期限!!:(

YAML解析器似乎返回了一个
Map
。因此您应该这样使用它:

Map config = (Map) yaml.load(input);
Map usersConfig = config.get("Users");
另外,您使用的是哪种特定的YAML解析器


更新1:如果查看,则
加载
方法根据YAML文件的内容返回一个
列表
映射
。因为YAML文件以键值映射(
用户
)开始,而不是数组(
-
),则
load
方法返回一个
Map
,这是本例中要返回的适当类型。

YAML解析器似乎正在返回一个
Map
。因此您应该这样使用它:

Map config = (Map) yaml.load(input);
Map usersConfig = config.get("Users");
另外,您使用的是哪种特定的YAML解析器

更新1:如果查看,则
加载
方法根据YAML文件的内容返回一个
列表
映射
。因为YAML文件以键值映射(
用户
)开始,而不是数组(
-
),加载方法返回一个
映射
,这是本例中要返回的适当类型。

1)在此处检查YAML的有效性:

2) 您的文档应该如下所示:(注意空格!)

1) 请在此处检查YAML的有效性:

2) 您的文档应该如下所示:(注意空格!)


我正在使用SnakeYaml解析器谢谢你的澄清。根据您的提示,我将代码修改为
mapobj=(Map)yaml.load(input)但尽管如此,我还是有一个错误,它说它无法将java.util.ArrayList转换为NodeIP类型(这是我定义的一个类)。所以,您可以建议对此进行一些更改吗?@ExceptionHandler请查看测试用例(尤其是
testLoadMap
)及其附带的YAML,以了解其工作原理。简而言之,SnakeYaml需要一些关于JavaBeans如何映射到YAML元素的额外信息。我只是花了一个小时试图弄明白为什么代码在停止工作之前是有效的。。。这是因为我无意中在我的YAML中加入了一个东西,改变了加载的返回值类型!!我正在使用SnakeYaml解析器谢谢你的澄清。根据您的提示,我将代码修改为
mapobj=(Map)yaml.load(input)但尽管如此,我还是有一个错误,它说它无法将java.util.ArrayList转换为NodeIP类型(这是我定义的一个类)。所以,您可以建议对此进行一些更改吗?@ExceptionHandler请查看测试用例(尤其是
testLoadMap
)及其附带的YAML,以了解其工作原理。简而言之,SnakeYaml需要一些关于JavaBeans如何映射到YAML元素的额外信息。我只是花了一个小时试图弄明白为什么代码在停止工作之前是有效的。。。这是因为我无意中在我的YAML中加入了一个东西,改变了加载的返回值类型!!您的验证器不再工作,下面是另一个验证器:。此外,良好的格式似乎删除了关键字之间的空格,并且“:”和“-”应该位于空行上,属性位于CR LF上。您的验证器不再工作,下面是另一个验证器:。此外,良好的格式似乎可以删除关键字之间的空格,并且“:”和“-”应该位于空行上,属性位于CR LF上。