YAML解析器是否必须将带引号标量解析为字符串?实例存疑
YAML引号标量与SnakeYAML的解析差异
我来帮你理清这个YAML解析的常见误区:
网上有建议提到,如果希望YAML标量值被处理为字符串类型,应该给它加上引号,举个例子:
foo: "2018-04-17"
这个建议还声称,所有YAML解析器都会把带引号的2018-04-17解析成对应编程语言的字符串类型——比如用SnakeYAML的话,应该得到java.lang.String,而不是java.util.Date。
但实际情况可不是这样:SnakeYAML依然会把这个带引号的值解析成java.util.Date类型。
这是因为SnakeYAML的默认解析逻辑里,就算标量被引号包裹,它还是会自动根据内容格式做类型推断。像2018-04-17这种符合日期格式的字符串(哪怕带双引号),都会被自动识别并转换成java.util.Date实例,除非你手动修改解析器的配置:
- 禁用隐式类型转换:创建
Constructor对象时调用setAllowImplicit(false) - 自定义标量解析规则,强制把日期格式的字符串解析成String类型
内容的提问来源于stack exchange,提问作者Laird Nelson
相关产品推荐
相关产品推荐

