为了账号安全,请及时绑定邮箱和手机立即绑定

使用 jackson 读取 yaml 到对象

使用 jackson 读取 yaml 到对象

FFIVE 2021-10-13 16:42:33
我有 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 和 list1)并仅存储数组对象。我目前的代码是:ObjectMapper mapper = new ObjectMapper(YAML_FACTORY);List<BLA> bla = Arrays.asList(mapper.readValue(ymlFile, BLA.class));
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

鉴于您的示例,您可以使用TypeReference并将您的文件描述为Map<String, Map<String, List<BLA>>>


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]]


查看完整回答
反对 回复 2021-10-13
  • 1 回答
  • 0 关注
  • 323 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信