如何更改snakeyaml中的隐式类型(int to double)
Posted
技术标签:
【中文标题】如何更改snakeyaml中的隐式类型(int to double)【英文标题】:How to change implicit types in snakeyaml (int to double) 【发布时间】:2018-01-26 04:51:14 【问题描述】:我的 yaml 文档看起来类似于 seq: [0, 0.23, 0.45, 0.67]
Snakeyaml 将 yaml 序列解析为具有值的 ArrayList:
[0]: 0 (Integer)
[1]: 0.23 (Double)
[2]: 0.45 (Double)
[3]: 0.67 (Double)
我需要所有这些值都是Double
类型,以便使用list.toArray(new Double[])
将列表转换为Double[]
- 否则会抛出ArrayStoreException
,因为Integer
不是同一类型作为Double
。
-
是否有一种可接受的方式将
ArrayList<Object>
转换为我错过的 Double[]
?
如何配置 Snakeyaml 以将所有数字加载为双精度数?
附加信息
使用的 Snakeyaml 版本是 1.17。
我这样创建 Snakeyaml 实例:
private Yaml createYamlInstance()
DumperOptions dumperOptions = new DumperOptions();
dumperOptions.setDefaultFlowStyle(FlowStyle.AUTO);
return new Yaml(dumperOptions);
编辑
我查看了documentation,但看不到example 中的默认隐式类型是如何更改的。
【问题讨论】:
你解决了这个问题吗? 【参考方案1】:根据本文档,数字的解析是按格式完成的:
http://symfony.com/doc/current/components/yaml/yaml_format.html#numbers
也许将 0 更改为 0.00 就足够了。
或者,如果无法更改格式,也许您可以在文档解析后在使用前强制转换 ArrayList 成员?
【讨论】:
是的,但是该文档是预先生成的,并且比我在问题中提供的摘录要复杂得多。因此无法更改文档。 我明白了。如果是这种情况,是否可以生成具有正确样式的文档而不是事后对其进行编辑? 如果真的没有其他选择,那将是我最后的选择,因为它可能会掩盖 freemarker 模板(通过它生成它)很多。 另一个选项可以在使用前简单地转换它,因为所有整数都会导致这个问题(4.00 写成 4 也将被解析为整数)。因此,如果您不能事先阻止数字的格式,则可以在访问任何特定 ArrayList 成员时简单地在事后使用强制转换。【参考方案2】:您可以删除INT implicit Resolver。
然后 FLOAT 隐式解析器将完成这项工作。
【讨论】:
以上是关于如何更改snakeyaml中的隐式类型(int to double)的主要内容,如果未能解决你的问题,请参考以下文章