Jackson:父元素数组的JSON解析:根名称'';与预期不匹配(';列表';)

Jackson:父元素数组的JSON解析:根名称'';与预期不匹配(';列表';),json,jackson,Json,Jackson,在编写下面的代码后,我得到以下异常 原因:com.fasterxml.jackson.databind.JsonMappingException:根名称“归档”与类型[集合类型;类java.util.List,包含[简单类型,类MasMonthlyReportDetail]的预期(“列表”)不匹配 JSON对象 { "Filing": [ { "periodInfo": {

在编写下面的代码后,我得到以下异常

原因:com.fasterxml.jackson.databind.JsonMappingException:根名称“归档”与类型[集合类型;类java.util.List,包含[简单类型,类MasMonthlyReportDetail]的预期(“列表”)不匹配

JSON对象

{
     "Filing":
    [
           {
                "periodInfo":
                    {
                         "date": "06-05-2013",
                 "year": "2015",
                 "Month": "January"

                    },
            "employerInfo":
                {
                 "name": "Y",
                 "place": "Y",
                 "country": "N",

                    },
                "employeeInfo":
                    [
                         {
                              "name": "785-23-0370",                  
                  "dob": "05/25/1952",

                         }
                    ],
                "messages": 
                [
                     {
                  "defaultMessage" : "xx",
                  "messageType" : "yy",
                  "messageCode" : "102"
                 }
                ]
          },

               {
                "periodInfo":
                    {
                         "date": "06-05-2013",
                 "year": "2015",
                 "Month": "January"

                    },
            "employerInfo":
                {
                 "name": "Y",
                 "place": "Y",
                 "country": "N",

                    },
                "employeeInfo":
                    [
                         {
                              "name": "785-23-0370",                  
                  "dob": "05/25/1952",

                         }
                    ],
                "messages": 
                [
                     {
                  "defaultMessage" : "xx",
                  "messageType" : "yy",
                  "messageCode" : "102"
                 }
                ]
          }
    ]
}
主类

ObjectMapper objectMapper = new ObjectMapper();        

objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

List<MasMonthlyReportDetail> lcd =  objectMapper.readValue(new File(filePath),new TypeReference<List<MasMonthlyReportDetail>>(){});
ObjectMapper ObjectMapper=new ObjectMapper();
configure(反序列化功能.UNWRAP_ROOT_值,true);
List lcd=objectMapper.readValue(新文件(filePath),新类型引用(){});
MasMonthlyReportDetail.java

@JsonRootName(value="Filing")

public class MasMonthlyReportDetail {

    private PeriodInfo periodInfo;
    private EmployerInfo employerInfo;
    List<EmployeeInfo> employeeInfo;
    List<Messages> messages;

    public PeriodInfo getPeriodInfo() {
        return periodInfo;
    }
    public void setPeriodInfo(PeriodInfo periodInfo) {
        this.periodInfo = periodInfo;
    }
    public EmployerInfo getEmployerInfo() {
        return employerInfo;
    }
    public void setEmployerInfo(EmployerInfo employerInfo) {
        this.employerInfo = employerInfo;
    }
    public List<EmployeeInfo> getEmployeeInfo() {
        return employeeInfo;
    }
    public void setEmployeeInfo(List<EmployeeInfo> employeeInfo) {
        this.employeeInfo = employeeInfo;
    }
    public List<Messages> getMessages() {
        return messages;
    }
    public void setMessages(List<Messages> messages) {
        this.messages = messages;
    }

}
@JsonRootName(value=“归档”)
公共类MasMonthlyReportDetail{
私有PeriodInfo PeriodInfo;
私人雇员信息雇主信息;
列出员工信息;
列出信息;
public PeriodInfo getPeriodInfo(){
返回周期信息;
}
public void setPeriodInfo(PeriodInfo PeriodInfo){
this.periodInfo=periodInfo;
}
公共EmployerInfo getEmployerInfo(){
返回员工信息;
}
公共无效setEmployerInfo(EmployerInfo EmployerInfo){
this.employerInfo=employerInfo;
}
公共列表getEmployeeInfo(){
返回employeeInfo;
}
public void setEmployeeInfo(列出employeeInfo){
this.employeeInfo=employeeInfo;
}
公共列表getMessages(){
返回消息;
}
公共消息(列出消息){
this.messages=消息;
}
}

我做了以下更改,代码对我有效

主要类别:

InputStream inputStream = resource.getInputStream();

ObjectMapper objectMapper = new ObjectMapper();

MasMonthlyReportDetailHolder masMonthlyReportDetailHolder = objectMapper.readValue(inputStream, MasMonthlyReportDetailHolder.class);

List<MasMonthlyReportDetail> masMonthlyReportDetail = masMonthlyReportDetailHolder.getMasMonthlyReportDetail();
InputStream InputStream=resource.getInputStream();
ObjectMapper ObjectMapper=新的ObjectMapper();
MasMonthlyReportDetailHolder MasMonthlyReportDetailHolder=objectMapper.readValue(inputStream,MasMonthlyReportDetailHolder.class);
List masMonthlyReportDetail=masMonthlyReportDetailHolder.getMasMonthlyReportDetail();
MasMonthlyReportDetailHolder类别:

public class MasMonthlyReportDetailHolder {

    private List<MasMonthlyReportDetail> masMonthlyReportDetail;

    @JsonProperty("Filing")
    public List<MasMonthlyReportDetail> getMasMonthlyReportDetail() {
        return masMonthlyReportDetail;
    }

    public void setMasMonthlyReportDetail(
            List<MasMonthlyReportDetail> masMonthlyReportDetail) {
        this.masMonthlyReportDetail = masMonthlyReportDetail;
    }

}
公共类MasMonthlyReportDetailHolder{
私人列表masMonthlyReportDetail;
@JsonProperty(“备案”)
公共列表getMasMonthlyReportDetail(){
返回masMonthlyReportDetail;
}
public void setMasMonthlyReportDetail(
列表masMonthlyReportDetail){
this.masMonthlyReportDetail=masMonthlyReportDetail;
}
}

添加
@JsonProperty(“归档”)
是避免此问题的关键。如果有其他程序,一定要告诉我

你试过这个吗? jacksonObjectMapper.reader(MasMonthlyReportDetail.class).withRootName(“归档”).readValue(jsonAsString)