如果值以特殊字符开头,则使用 Jackson 解析 YAML 文件失败
Parsing of YAML file with Jackson fails if value starts with special character
我正在尝试解析以下 YAML 内容:
template:
amplitude: 5
noise: +-0.01
失败并出现以下异常:
com.fasterxml.jackson.databind.JsonMappingException: empty String (through reference chain: ... ->my.package.Template["noise"])
classTemplate
包含类型 FlexValue
的 属性noise
。我做了一个自定义 JsonDeserializer
负责解析此类型属性的值。该表示法允许使用一些花哨的表达式,因此该类型的名称为 FlexValue
。此示例中的值“+-0.01”是解串器的有效输入。但是,似乎甚至没有调用反序列化器。 异常好像是在那之前抛出的
这是我的自定义解串器的相关 class 定义:
class FlexValueParser : JsonDeserializer<FlexValue>() {
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): FlexValue {
//...
}
}
自定义解串器注册如下:
@JsonDeserialize(using = FlexValueParser::class)
class FlexValue {
// ...
}
此设置似乎工作正常。它也适用于其他类型,它们的解析方式不同。
如果我在“+-”之前加上一个“0”,这也是一个有效的输入,它就有效:
template:
amplitude: 5
noise: 0+-0.01
“+-”是 YAML 中的一个特殊字符导致 Jackson 无法解析它,因为它试图做一些与我预期不同的事情吗?我希望它将输入“+-0.01”视为 String
,因为它不代表有效的数字输入。
同样的问题发生在我使用 noise: ~0.01
时,这也是我的解串器的有效输入。同样的异常会被抛出,可以通过在卷曲的“~”之前加上一个“0”来避免。
有人可以给我提示吗?
找到问题的根源,与Jackson或YAML无关。因此关闭这个问题。
我正在尝试解析以下 YAML 内容:
template:
amplitude: 5
noise: +-0.01
失败并出现以下异常:
com.fasterxml.jackson.databind.JsonMappingException: empty String (through reference chain: ... ->my.package.Template["noise"])
classTemplate
包含类型 FlexValue
的 属性noise
。我做了一个自定义 JsonDeserializer
负责解析此类型属性的值。该表示法允许使用一些花哨的表达式,因此该类型的名称为 FlexValue
。此示例中的值“+-0.01”是解串器的有效输入。但是,似乎甚至没有调用反序列化器。 异常好像是在那之前抛出的
这是我的自定义解串器的相关 class 定义:
class FlexValueParser : JsonDeserializer<FlexValue>() {
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): FlexValue {
//...
}
}
自定义解串器注册如下:
@JsonDeserialize(using = FlexValueParser::class)
class FlexValue {
// ...
}
此设置似乎工作正常。它也适用于其他类型,它们的解析方式不同。
如果我在“+-”之前加上一个“0”,这也是一个有效的输入,它就有效:
template:
amplitude: 5
noise: 0+-0.01
“+-”是 YAML 中的一个特殊字符导致 Jackson 无法解析它,因为它试图做一些与我预期不同的事情吗?我希望它将输入“+-0.01”视为 String
,因为它不代表有效的数字输入。
同样的问题发生在我使用 noise: ~0.01
时,这也是我的解串器的有效输入。同样的异常会被抛出,可以通过在卷曲的“~”之前加上一个“0”来避免。
有人可以给我提示吗?
找到问题的根源,与Jackson或YAML无关。因此关闭这个问题。