gpt4 book ai didi

Java,如何使用 Jackson ObjectMapper 反序列化双重嵌套 json 列表

转载 作者:行者123 更新时间:2023-12-02 02:14:12 24 4
gpt4 key购买 nike

我正在尝试使用以下结构反序列化 json 对象:

{"results":{  
"Assessments":{
"Assessment":[
{
"assessor":"",
"buildingName":"Emerald Palace Project",
"certBody":"",
...

顶层是一个名为“结果”的单个实体,其中包含“评估”,而“评估”只是“评估”的列表/数组。

我尝试了映射器配置的多种组合,例如:

        ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);

但无论我如何切换它,我都会不断获得带有空评估的结果对象。

这是我使用 Lombok 的对象类。

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
static class Results {
private Assessments assessments;
}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
static class Assessments {
private List<Assessment> assessments;
}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Assessment {
private int parentId;
private String stage;
private String notes;
private String rating;
private String scheme;
}

我觉得我一定少了一 block 。

任何见解将不胜感激。

最佳答案

澄清一下:你写的

[…] "assessments" which are just a list/array of "assessment."

并且您的 POJO 反射(reflect)了这一点...那么您的 JSON 必须是...

{"results":{  
"Assessments":{
[
{
"assessor":"",
"buildingName":"Emerald Palace Project",
"certBody":"",
...

…而不是…

{"results":{  
"Assessments":{
"Assessment":[
{
"assessor":"",
"buildingName":"Emerald Palace Project",
"certBody":"",
...

直接关注“评估”中的列表。另请注意,您的 POJO 字段是小写的,因此必须是 JSON 键。

因此,要将 POJO 与 JSON 匹配,您有多种选择:

  • 将 JSON 键更改为小写和驼峰式
  • 使用 @JsonProperty("field-name") 来匹配您的 JSON 键
  • ...

但在每种情况下,您都必须了解当前有关评估/评估列表的冲突。

关于Java,如何使用 Jackson ObjectMapper 反序列化双重嵌套 json 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com