簡體   English   中英

Jackson + YAML 用於非數字 (.NAN)

[英]Jackson + YAML for Not A Number (.NAN)

根據 YAML 規范,非數字表示為.NAN https://yaml.org/refcard.html

但是,當使用jackson-dataformats-text YAMLMapper jackson-dataformats-textYAMLMapper反序列YAMLMapper ,我們得到:

格式錯誤的數值“.NAN”

你如何告訴ObjectMapper接受給定的字符串作為表示 null 而不深入到自定義反序列化器? 或者我應該啟用特定於 YAML 的功能嗎?

如果你使用NULL ,它在 Jackson 端工作,但它不再是有效的 YAML 和模式感知編輯器,比如 VS Code 知道它,這會讓最終用戶感到困惑:

VS 代碼無法驗證 null

我通過繞過YAMLMapper並直接轉到 SnakeYAML 的Yaml解決了這個問題。 我這樣做是為了解決 Jackson 沒有解決錨點的問題,但后來我意識到它也解決了.NaN /null 問題 - .NaN現在被正確解析為Double.NaN

static final Yaml YAML = new Yaml();
static final ObjectMapper MAPPER = new ObjectMapper();
...

// Use SnakeYAML directly to resolve anchors and handle .NaN
protected static <T> T load(Path p, Class<T> cls) throws IOException {
    val yaml = YAML.load(Files.newInputStream(p));
    return MAPPER.treeToValue(MAPPER.valueToTree(yaml), cls);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM