【问题标题】:Jackson YAML reader not parsing yaml file properly杰克逊 YAML 阅读器无法正确解析 yaml 文件
【发布时间】:2021-07-21 21:32:56
【问题描述】:

我正在尝试使用 Jackson 解析 YAML 文件。请在下面找到相关文件。

Yaml 文件:

params:
 - param-one : abcd
 - param-two : abcd
 - param-three : abcd
 - param-four : abcd

型号:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "params"
})
@Data
public class ParamsMain {

    @JsonProperty("params")
    private List<Params> params = null;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
            "param-one",
            "param-two",
            "param-three",
            "param-four"
    })
    @Data
    public static class Params {

        @JsonProperty("param-one")
        private String paramOne;

        @JsonProperty("param-two")
        private String paramTwo;

        @JsonProperty("param-three")
        private String paramThree;

        @JsonProperty("param-four")
        private String paramFour;
    }
}

我正在尝试读取 yaml 内容如下:

ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
ParamsMain paramsMain = objectMapper.readValue(<PATH_OF_YAML_FILE>, ParamsMain.class);

但是当我尝试打印解析后的数据时,我得到的是:

[{
    param-one: abcd
    param-two: null
    param-three: null
    param-four: null
},
{
    param-one: null
    param-two: abcd
    param-three: null
    param-four: null
},
{
    param-one: null
    param-two: null
    param-three: abcd
    param-four: null
},
{
    param-one: null
    param-two: null
    param-three: null
    param-four: abcd
}]

如何让它读取,以便我得到以下输出,而不是我收到的数组?

param-one: abcd
param-two: abcd
param-three: abcd
param-four: abcd

【问题讨论】:

  • 请添加您用于输出的代码。输出甚至不是有效的 YAML,因此您似乎没有使用 YAML 库进行输出。显然,如果您不将输入结构转换为所需的输出结构,您将无法获得所需的输出。需要使用杰克逊吗?使用 SnakeYAML 的低级 API 解决这个问题会容易得多。
  • 打印对象的代码:System.out.println(ReflectionToStringBuilder.toString(paramsMain,ToStringStyle.MULTI_LINE_STYLE));

标签: java jackson yaml


【解决方案1】:

所以我能够找出存储值的正确方法。我不得不将 POJO 更改为以下内容:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ParamsMain {

    @JsonProperty("params")
    private Map<String, String>[] params;

}

这帮助我以以下格式存储数据:

{{param-one=abcd},{param-two=abcd},{param-three=abcd},{param-four=abcd}}

我使用以下代码打印正在解析的内容:

ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
ParamsMain paramsMain = objectMapper.readValue(<PATH_OF_YAML_FILE>, ParamsMain.class);


//code to print
System.out.println(ReflectionToStringBuilder.toString(paramsMain,ToStringStyle.MULTI_LINE_STYLE));

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多