簡體   English   中英

Jackson YAML 解析父對象和對象數組

[英]Jackson YAML parsing with parent objects & array of objects

我有一個包含四個父對象的 yaml 文件。 第四個對象是一個元素數組,我將要為其創建一個類並填充該元素。 有沒有辦法在 jackson 中使用對象映射器來忽略前三個對象,然后解析我的“InspectionModules”列表?

我的 yaml 文件如下所示:

# Don't care about these elements
InspectionGroups:
InspecitonModes:
ThresholdTypes:

# This array is of interest
InspectionModules:
 - feature : FC_Trig1
   name: "first inspection"
   Channels:
   - id: ICI_01
     category: Dia_MC_Config
 - feature : FC_Trig2
   name: "Diagonal Missing Cap"
   Channels:
   - id: ICI_02
     category: Dia_MC_Config

基本上我想創建一個名為InspectionModule 的類,並讓映射器將InspectionModules 數組的元素映射到這個類中。 傑克遜有沒有一種簡單的方法可以做到這一點? 如果不是,是否建議重新組織我們的 YAML 文件,以便我們可以利用對象映射器?

我假設您已經對 Jackson 的ObjectMapper有所了解。

首先,您需要一個代表 YAML 文件全部內容的 Java 類。 我們稱之為Root

public class Root {

    @JsonProperty("InspectionModules")
    private List<InspectionModule> inspectionModules;

    // getters and setters omitted here for brevity
}

請注意,您需要使用@JsonProperty來告訴 Jackson YAML 名稱InspectionModules對應於您的 Java 屬性inspectionModules ,盡管它們的拼寫不同。

接下來,您需要一個 Java 類來表示InspectionModules:下的 YAML 部分之一InspectionModules:

public class InspectionModule {

    private String feature;

    private String name;

    @JsonProperty("Channels")
    private List<Channel> channels;

    // getters and setters omitted here for brevity
}

最后,您需要一個Channel類來表示Channels:下的 YAML 部分之一Channels:您應該已經能夠自己編寫這個 Java 類了。

現在您已准備好使用 Jackson 的YAMLMapper將您的 YAML 文件讀入Root對象。

File file = new File("example.yaml");
ObjectMapper objectMapper = new YAMLMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Root root = objectMapper.readValue(file, Root.class);

請注意,您需要告訴 Jackson 在閱讀過程中遇到未知屬性(如InspectionGroups )是可以的。

暫無
暫無

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

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