Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取空YAML文件_Java_Json_Jackson_Yaml - Fatal编程技术网

Java 读取空YAML文件

Java 读取空YAML文件,java,json,jackson,yaml,Java,Json,Jackson,Yaml,对于配置文件格式,我想使用YAML和Jackson来读取它。因此,我有一个POJO类配置,带有一些属性,只需通过ObjectMapper.readValue()直接从文件中读取相应的对象即可 原则上,这可以正常工作,除非配置文件(注释除外)为空。然后是例外 com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input 被抛出。因为所有配置值都有默认值,所以不为任何配置值指定值

对于配置文件格式,我想使用YAML和Jackson来读取它。因此,我有一个POJO类
配置
,带有一些属性,只需通过
ObjectMapper.readValue()
直接从文件中读取相应的对象即可

原则上,这可以正常工作,除非配置文件(注释除外)为空。然后是例外

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input

被抛出。因为所有配置值都有默认值,所以不为任何配置值指定值都可以,所以我允许这样做。有没有办法说服Jackson接受一个空文件?

如果YAML文件的顶层不是序列或映射,那么它是一个标量。这样,您就可以拥有一个仅由字符串(或数字)组成的YAML文件。如果一个标量值在一个列表中是空的,作为映射中的值,它相当于表示为(
nil
对于Ruby,
None
对于Python)的空标量值

空YAML文件是一个有效的YAML文件,其标量因缺少任何特定值而为空


现在单标量文件很少有用,通常顶层是映射、序列或某个派生的复杂类型。您的应用程序似乎假定toplevel是适当的复杂类型,并且不检查解析器是否返回NULL,它应该进行检查。

如果空yaml文件有效,您可以将其报告为bug,尽管我猜这可能是一个设计决策。无论如何,我会抓住这个例外,继续前进。@kapep:是的,这就是我现在要做的。如果文件中出现实际错误,我也会回到默认配置,所以这并不重要。但如果我决定以不同的方式处理错误(例如,终止时发出噪音),我最终会比较异常消息以区分错误与空文件大小写,我会发现它非常难看。正如我在问题中所述,解析器抛出异常,所以这是我唯一可以检查的。@user686249我不知道您的解析器使用的parsernames,但在我看来,“com.fasterxml.jackson.databind.JsonMappingException”更像是一个应用程序,而不是YAML解析器。这并不是帮助您解决问题,而是报告错误的位置。