簡體   English   中英

YAML Jackson-數組的錨鍵

[英]YAML Jackson - Anchor keys of Array

我正在嘗試將YAML文件解析為一個對象。

即使Online YAML解析器告訴我它可以按照我想要的方式進行解析,Jackson YAML解析器也拒絕提供我想要的內容。

這是YAML文件:

- nom: "service1"
  etats : &e1s1
    - nom: "e1"
      childs:
        - nom: "e2"
          childs:
            - nom: "e3"
              childs:
              - &a
                nom: "e5"
        - nom: "e4"
          childs:
            - <<: *a

在線YAML分析器告訴我,“ e4”和“ e3”的孩子為“ e5”。

但是,當我嘗試用Jackson解析它時,出現以下錯誤:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "<<" (class Etat), not marked as ignorable (4 known properties: "dependsOnAnotherService", "nom", "hasToken", "childs"])
at [Source: (File); line: 13, column: 21] (through reference chain: java.lang.Object[][0]->Service["etats"]->java.util.ArrayList[0]->Etat["childs"]->java.util.ArrayList[1]->Etat["childs"]->java.util.ArrayList[0]->Etat["<<"])

所以,我想知道是否有人可以在傑克遜會接受的地方做到這一點?

更新

我也試過這個:

- nom: "service1"
  etats : &e1s1
    - nom: "e1"
      childs:
        - nom: "e2"
          childs:
            - nom: "e3"
              childs:
              - &a
                nom: "e5"
        - nom: "e4"
          childs:
            - *a

但是得到:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `Etat` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('a')
at [Source: (File); line: 13, column: 15] (through reference chain: java.lang.Object[][0]->Service["etats"]->java.util.ArrayList[0]->Etat["childs"]->java.util.ArrayList[1]->Etat["childs"]->java.util.ArrayList[0])

<<不是YAML的核心功能,僅被指定為過時的YAML 1.1的可選標記(請參見此處 )。 因此,傑克遜完全有權不支持它。 相反,它嘗試將<<解析為字段名稱,這顯然會失敗,因為沒有這樣的字段。

第二種方法更合適,因為它僅使用核心YAML功能。 您得到的錯誤指向Jackson中的錯誤,因為它錯誤地將別名*a視為字符串,而不是將其解析。 提交錯誤報告可能是一個好主意。

現在,您將問題稱為Jackson而不是YAML解析器 它僅使用SnakeYaml作為解析器。 SnakeYaml可以自行將YAML加載到用戶定義的類,因此最好直接使用SnakeYaml API Afaik它正確處理別名。

暫無
暫無

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

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