【问题标题】:Read yaml to object using jackson使用杰克逊读取 yaml 到对象
【发布时间】:2018-09-27 07:55:03
【问题描述】:

我的 Yaml 看起来像这样:

data_lists:
      list1:(dynamic name)  
        - AA: true
          BB: true
          CC: "value"
        - AA: false
          BB: true
          CC: "value2"

我想要得到的是将它存储到对象中

class BLA{
private boolean AA;
private boolean BB;
private String CC;

//getters and setters

}

我正在使用 jackson 库,但我可以找到如何忽略根元素(如 data_lsts 和 lists1)并仅存储数组对象。

我当前的代码是:

ObjectMapper mapper = new ObjectMapper(YAML_FACTORY);
List<BLA> bla = Arrays.asList(mapper.readValue(ymlFile, BLA.class));

【问题讨论】:

  • 您能添加您当前的代码吗?
  • @Arnaud 添加到描述中。

标签: java jackson yaml jackson-databind


【解决方案1】:

根据您的示例,您可以使用TypeReference 并将您的文件描述为Map&lt;String, Map&lt;String, List&lt;BLA&gt;&gt;&gt;

private static final String yamlString =
    "data_lists:\n" +
    "      list1:  \n" +
    "        - AA: true\n" +
    "          BB: true\n" +
    "          CC: \"value\"\n" +
    "        - AA: false\n" +
    "          BB: true\n" +
    "          CC: \"value2\"";

public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
    Map<String, Map<String, List<BLA>>> fileMap = mapper.readValue(
        yamlString, 
        new TypeReference<Map<String, Map<String, List<BLA>>>>(){});
    Map<String, List<BLA>> dataLists = fileMap.get("data_lists");
    List<BLA> blas = dataLists.get("list1");
    System.out.println(blas);
}

class BLA {
    @JsonProperty("AA")
    private boolean aa;
    @JsonProperty("BB")
    private boolean bb;
    @JsonProperty("CC")
    private String cc;

    @Override
    public String toString() {
        return aa + "|" + bb + "|" + cc;
    }

    // Getters/Setters
}

这个输出

[true|true|value, false|true|value2]

如果你有这样的列表:

data_lists:
  list1:  
    - AA: true
      BB: true
      CC: "value"
    - AA: false
      BB: true
      CC: "value2"
  list2:  
    - AA: true
      BB: true
      CC: "value3"
    - AA: false
      BB: true
      CC: "value4"

您可以将"data_lists" 值作为集合获取

Map<String, List<BLA>> dataLists = fileMap.get("data_lists");
Collection<List<BLA>> blas = dataLists.values();
System.out.println(blas);

输出:

[[true|true|value, false|true|value2], [true|true|value3, false|true|value4]]

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多