首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能把这个json转换成pojo (java类)

我不能把这个json转换成pojo (java类)
EN

Stack Overflow用户
提问于 2017-09-18 18:15:40
回答 1查看 85关注 0票数 0

我不能将这个json转换成java类,我在这个json文件中有" value“的问题,一些位置的值是数组,一些位置的值是jost key值!!我使用IntelliJ,这是我的错误:

代码语言:javascript
复制
2017-09-18 14:43:21.540  WARN 5496 --- [apr-8080-exec-2]  .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of com.ada.bean.response.Issue out of START_ARRAY token

在源:(PushbackInputStream);行: 1,列: 1;嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从源:(PushbackInputStream)的START_ARRAY令牌反序列化com.ada.bean.response.Issue的实例;行: 1,列:1

这是我的json:

代码语言:javascript
复制
[
{
"id": "ETC-1",
"entityId": "94-5024",
"jiraId": null,
"field": [
  {
    "name": "projectShortName",
    "value": "ETC"
  },
  {
    "name": "numberInProject",
    "value": "1"
  },
  {
    "name": "summary",
    "value": "????? API ??? Youtrack ? ????? ?? ??"
  },
  {
    "name": "created",
    "value": "1504079347372"
  },
  {
    "name": "updated",
    "value": "1504341622265"
  },
  {
    "name": "updaterName",
    "value": "a.fathizade"
  },
  {
    "name": "updaterFullName",
    "value": "Ali Fathizadeh"
  },
  {
    "name": "resolved",
    "value": "1504341622257"
  },
  {
    "name": "reporterName",
    "value": "v.sabeti"
  },
  {
    "name": "reporterFullName",
    "value": "???? ?????"
  },
  {
    "name": "commentsCount",
    "value": "0"
  },
  {
    "name": "votes",
    "value": "0"
  },
  {
    "name": "Priority",
    "value": [
      "Normal"
    ],
    "valueId": [
      "Normal"
    ],
    "color": {
      "bg": "#e6f6cf",
      "fg": "#4da400"
    }
  },
  {
    "name": "Type",
    "value": [
      "Task"
    ],
    "valueId": [
      "Task"
    ],
    "color": null
  },
  {
    "name": "State",
    "value":  [
      "Fixed"
    ],
    "valueId": [
      "Fixed"
    ],
    "color": null
  },
  {
    "name": "Assignee",
    "value": [
      {
        "value": "a.fathizade",
        "fullName": "Ali Fathizadeh"
      }
    ]
  },
  {
    "name": "Subsystem",
    "value": [
      "Employees"
    ],
    "valueId": [
      "Employees"
    ],
    "color": {
      "bg": "#ff7123",
      "fg": "#fff"
    }
  },
  {
    "name": "sprint",
    "value": [
      {
        "value": "First sprint",
        "id": "Etc Board:First sprint"
      }
    ]
  }
],
"comment": [],
"tag": []
},
{
"id": "ETC-2",
"entityId": "94-5026",
"jiraId": null,
"field": [
  {
    "name": "projectShortName",
    "value": "ETC"
  },
  {
    "name": "numberInProject",
    "value": "2"
  },
  {
    "name": "summary",
    "value": "???? ?????? ???? ? ??? ??? ????"
  },
  {
    "name": "created",
    "value": "1504079557400"
  },
  {
    "name": "updated",
    "value": "1504341630002"
  },
  {
    "name": "updaterName",
    "value": "a.fathizade"
  },
  {
    "name": "updaterFullName",
    "value": "Ali Fathizadeh"
  },
  {
    "name": "resolved",
    "value": "1504341629992"
  },
  {
    "name": "reporterName",
    "value": "v.sabeti"
  },
  {
    "name": "reporterFullName",
    "value": "???? ?????"
  },
  {
    "name": "commentsCount",
    "value": "0"
  },
  {
    "name": "votes",
    "value": "0"
  },
  {
    "name": "Priority",
    "value": [
      "Normal"
    ],
    "valueId": [
      "Normal"
    ],
    "color": {
      "bg": "#e6f6cf",
      "fg": "#4da400"
    }
  },
  {
    "name": "Type",
    "value": [
      "Task"
    ],
    "valueId": [
      "Task"
    ],
    "color": null
  },
  {
    "name": "State",
    "value": [
      "Fixed"
    ],
    "valueId": [
      "Fixed"
    ],
    "color": null
  },
  {
    "name": "Assignee",
    "value": [
      {
        "value": "a.fathizade",
        "fullName": "Ali Fathizadeh"
      }
    ]
  },
  {
    "name": "Subsystem",
    "value": [
      "Employees"
    ],
    "valueId": [
      "Employees"
    ],
    "color": {
      "bg": "#ff7123",
      "fg": "#fff"
    }
  },
  {
    "name": "sprint",
    "value": [
      {
        "value": "First sprint",
        "id": "Etc Board:First sprint"
      }
    ]
  }
 ],
 "comment": [],
 "tag": []
 },
 {
"id": "ETC-4",
"entityId": "94-5030",
"jiraId": null,
"field": [
  {
    "name": "projectShortName",
    "value": "ETC"
  },
  {
    "name": "numberInProject",
    "value": "4"
  },
  {
    "name": "summary",
    "value": "????? ??????? ???? ?? Youtrack ? ????? ?? ?? ?????? ????"
  },
  {
    "name": "created",
    "value": "1504079626044"
  },
  {
    "name": "updated",
    "value": "1504341630988"
  },
  {
    "name": "updaterName",
    "value": "a.fathizade"
  },
  {
    "name": "updaterFullName",
    "value": "Ali Fathizadeh"
  },
  {
    "name": "reporterName",
    "value": "v.sabeti"
  },
  {
    "name": "reporterFullName",
    "value": "???? ?????"
  },
  {
    "name": "commentsCount",
    "value": "0"
  },
  {
    "name": "votes",
    "value": "0"
  },
  {
    "name": "Priority",
    "value": [
      "Normal"
    ],
    "valueId": [
      "Normal"
    ],
    "color": {
      "bg": "#e6f6cf",
      "fg": "#4da400"
    }
  },
  {
    "name": "Type",
    "value": [
      "Task"
    ],
    "valueId": [
      "Task"
    ],
    "color": null
  },
  {
    "name": "State",
    "value": [
      "In Progress"
    ],
    "valueId": [
      "In Progress"
    ],
    "color": null
    },
    {
      "name": "Assignee",
     "value": [
       {
        "value": "a.fathizade",
        "fullName": "Ali Fathizadeh"
      }
    ]
  },
  {
    "name": "Subsystem",
    "value": [
      "Employees"
    ],
    "valueId": [
      "Employees"
    ],
    "color": {
      "bg": "#ff7123",
      "fg": "#fff"
    }
  },
  {
    "name": "sprint",
    "value": [
      {
        "value": "First sprint",
        "id": "Etc Board:First sprint"
      }
    ]
  }
],
"comment": [],
"tag": []
},
{
"id": "ETC-5",
"entityId": "94-5032",
"jiraId": null,
"field": [
  {
    "name": "projectShortName",
    "value": "ETC"
  },
  {
    "name": "numberInProject",
    "value": "5"
  },
  {
    "name": "summary",
    "value": "Parse ???? ??????? ???? Excel ????????"
  },
  {
    "name": "created",
    "value": "1504079740110"
  },
  {
    "name": "updated",
    "value": "1505302061947"
  },
  {
    "name": "updaterName",
    "value": "a.fathizade"
  },
  {
    "name": "updaterFullName",
    "value": "Ali Fathizadeh"
  },
  {
    "name": "resolved",
    "value": "1505302061939"
  },
  {
    "name": "reporterName",
    "value": "v.sabeti"
  },
  {
    "name": "reporterFullName",
    "value": "???? ?????"
  },
  {
    "name": "commentsCount",
    "value": "0"
  },
  {
    "name": "votes",
    "value": "0"
  },
  {
    "name": "Priority",
    "value": [
      "Normal"
    ],
    "valueId": [
      "Normal"
    ],
    "color": {
      "bg": "#e6f6cf",
      "fg": "#4da400"
    }
  },
  {
    "name": "Type",
    "value": [
      "Task"
    ],
    "valueId": [
      "Task"
    ],
    "color": null
  },
  {
    "name": "State",
    "value": [
      "Fixed"
    ],
    "valueId": [
      "Fixed"
    ],
    "color": null
  },
  {
    "name": "Assignee",
    "value": [
      {
        "value": "a.fathizade",
        "fullName": "Ali Fathizadeh"
      }
    ]
  },
  {
    "name": "Subsystem",
    "value": [
      "Employees"
    ],
    "valueId": [
      "Employees"
    ],
    "color": {
      "bg": "#ff7123",
      "fg": "#fff"
    }
  },
  {
    "name": "sprint",
    "value": [
      {
        "value": "First sprint",
        "id": "Etc Board:First sprint"
      }
    ]
  }
 ],
 "comment": [],
 "tag": []
 },
 {
"id": "ETC-6",
"entityId": "94-5034",
"jiraId": null,
"field": [
  {
    "name": "projectShortName",
    "value": "ETC"
  },
  {
    "name": "numberInProject",
    "value": "6"
  },
  {
    "name": "summary",
      "value": "????? ??????? Youtrack ????? ?? DB ?? ??????? ???"        
  },
  {
    "name": "description",
    "value": "????? ??????? ??? ??? ?? ???? ?????"
  },
  {
    "name": "created",
    "value": "1504079823857"
  },
  {
    "name": "updated",
    "value": "1504079836355"
  },
  {
    "name": "updaterName",
    "value": "v.sabeti"
  },
  {
    "name": "updaterFullName",
    "value": "???? ?????"
  },
  {
    "name": "reporterName",
    "value": "v.sabeti"
  },
  {
    "name": "reporterFullName",
    "value": "???? ?????"
  },
  {
    "name": "commentsCount",
    "value": "0"
  },
  {
    "name": "votes",
    "value": "0"
  },
  {
    "name": "Priority",
    "value": [
      "Normal"
    ],
    "valueId": [
      "Normal"
    ],
    "color": {
      "bg": "#e6f6cf",
      "fg": "#4da400"
    }
  },
  {
    "name": "Type",
    "value": [
      "Task"
    ],
    "valueId": [
      "Task"
    ],
    "color": null
  },
  {
    "name": "State",
    "value": [
      "Open"
    ],
    "valueId": [
      "Open"
    ],
    "color": null
  },
  {
    "name": "Assignee",
    "value": [
      {
        "value": "a.fathizade",
        "fullName": "Ali Fathizadeh"
      }
    ]
  },
  {
    "name": "Subsystem",
    "value": [
      "Employees"
    ],
    "valueId": [
      "Employees"
    ],
    "color": {
      "bg": "#ff7123",
      "fg": "#fff"
    }
  },
  {
    "name": "sprint",
    "value": [
      {
        "value": "First sprint",
        "id": "Etc Board:First sprint"
      }
    ]
  }
],
"comment": [],
"tag": []
 },
{
"id": "ETC-7",
"entityId": "94-5036",
"jiraId": null,
"field": [
  {
    "name": "projectShortName",
    "value": "ETC"
  },
  {
    "name": "numberInProject",
    "value": "7"
  },
  {
    "name": "summary",
    "value": "????????? ?? ????? ?????? ? ????? ?? ?? ??? ??????"
  },
  {
    "name": "created",
    "value": "1504079868785"
  },
  {
    "name": "updated",
    "value": "1504079868785"
  },
  {
    "name": "updaterName",
    "value": "v.sabeti"
  },
  {
    "name": "updaterFullName",
    "value": "???? ?????"
  },
  {
    "name": "reporterName",
    "value": "v.sabeti"
  },
  {
    "name": "reporterFullName",
    "value": "???? ?????"
  },
  {
    "name": "commentsCount",
    "value": "0"
  },
  {
    "name": "votes",
    "value": "0"
  },
  {
    "name": "Priority",
    "value": [
      "Normal"
    ],
    "valueId": [
      "Normal"
    ],
    "color": {
      "bg": "#e6f6cf",
      "fg": "#4da400"
    }
  },
  {
    "name": "Type",
    "value": [
      "Task"
    ],
    "valueId": [
      "Task"
    ],
    "color": null
  },
  {
    "name": "State",
    "value": [
      "Open"
    ],
    "valueId": [
      "Open"
    ],
    "color": null
  },
  {
    "name": "Assignee",
    "value": [
      {
        "value": "a.fathizade",
        "fullName": "Ali Fathizadeh"
      }
    ]
    },
    {
    "name": "Subsystem",
    "value": [
      "Employees"
    ],
    "valueId": [
      "Employees"
    ],
    "color": {
      "bg": "#ff7123",
      "fg": "#fff"
    }
  },
  {
    "name": "sprint",
    "value": [
      {
        "value": "First sprint",
        "id": "Etc Board:First sprint"
      }
    ]
  }
],
"comment": [],
"tag": []
}
]

这是我为json: Issues编写的类:

代码语言:javascript
复制
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Issues implements Serializable
{
@JsonProperty
private Issue[] issue;

public Issue[] getIssue ()
{
    return issue;
}

public void setIssue (Issue[] issue)
{
    this.issue = issue;
}

@Override
public String toString()
{
    return "ClassPojo [issue = "+issue+"]";
}
}

问题:

代码语言:javascript
复制
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Issue implements Serializable
{

@JsonProperty
private String id;

@JsonProperty
private Field [] field;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public Field[] getField() {
    return field;
}

public void setField(Field[] field) {
    this.field = field;
}

@Override
public String toString() {
    return "Issue{" +
            "id='" + id + '\'' +
            ", field=" + Arrays.toString(field) +
            '}';
 }
 }

字段:

代码语言:javascript
复制
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Field implements Serializable {


@JsonProperty
private String name;


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


@Override
public String toString() {
    return "Field{" +
            "name='" + name + '\'' +
//                ", value='" + value + '\'' +
            '}';
}
}
EN

回答 1

Stack Overflow用户

发布于 2017-09-18 22:57:56

因为您的“根”实体是一种数组(正如异常消息所说的那样),(据我所知) Jackson Mapper使用从Collection继承的方法。因此,最快、最简单的方法是从集合实现继承方法,例如ArrayList:

代码语言:javascript
复制
...
public class Issues extends ArrayList<Issue> {

@Override
public String toString() {
    return "ClassPojo [issue = " + super.toString() +  "]";
 }

}

请注意,您不再需要"issue“属性,该数组由List实现在内部存储。上面的示例适用于我,它是从com.fasterxml.jackson.databind.ObjectMapper调用的( getJson()返回您提供的字符串):

代码语言:javascript
复制
ObjectMapper mapperObj = new ObjectMapper();
    try {
        Issues li = mapperObj.readValue(getJson(),Issues.class);
        System.out.println(li);
    } catch (IOException e) {
        e.printStackTrace();
    }

输出:

代码语言:javascript
复制
ClassPojo [issue = [Issue{id='ETC-1', field=[Field{name='projectShortName'}, Field{name='numberInProject'}, Field{name='summary'}, Field{name='created'}, Field{name='updated'}, Field{name='updaterName'}, Field{name='updaterFullName'}, Field{name='resolved'}, Field{name='reporterName'}, Field{name='reporterFullName'}, Field{name='commentsCount'}, Field{name='votes'}, Field{name='Priority'}, Field{name='Type'}, Field{name='State'}, Field{name='Assignee'}, Field{name='Subsystem'}, Field{name='sprint'}]}, Issue{id='ETC-2', field=[Field{name='projectShortName'}, Field{name='numberInProject'}, Field{name='summary'}, Field{name='created'}, Field{name='updated'}, Field{name='updaterName'}, Field{name='updaterFullName'}, Field{name='resolved'}, Field{name='reporterName'}, Field{name='reporterFullName'}, Field{name='commentsCount'}, Field{name='votes'}, Field{name='Priority'}, Field{name='Type'}, Field{name='State'}, Field{name='Assignee'}, Field{name='Subsystem'}, Field{name='sprint'}]}, Issue{id='ETC-4', field=[Field{name='projectShortName'}, Field{name='numberInProject'}, Field{name='summary'}, Field{name='created'}, Field{name='updated'}, Field{name='updaterName'}, Field{name='updaterFullName'}, Field{name='reporterName'}, Field{name='reporterFullName'}, Field{name='commentsCount'}, Field{name='votes'}, Field{name='Priority'}, Field{name='Type'}, Field{name='State'}, Field{name='Assignee'}, Field{name='Subsystem'}, Field{name='sprint'}]}, Issue{id='ETC-5', field=[Field{name='projectShortName'}, Field{name='numberInProject'}, Field{name='summary'}, Field{name='created'}, Field{name='updated'}, Field{name='updaterName'}, Field{name='updaterFullName'}, Field{name='resolved'}, Field{name='reporterName'}, Field{name='reporterFullName'}, Field{name='commentsCount'}, Field{name='votes'}, Field{name='Priority'}, Field{name='Type'}, Field{name='State'}, Field{name='Assignee'}, Field{name='Subsystem'}, Field{name='sprint'}]}, Issue{id='ETC-6', field=[Field{name='projectShortName'}, Field{name='numberInProject'}, Field{name='summary'}, Field{name='description'}, Field{name='created'}, Field{name='updated'}, Field{name='updaterName'}, Field{name='updaterFullName'}, Field{name='reporterName'}, Field{name='reporterFullName'}, Field{name='commentsCount'}, Field{name='votes'}, Field{name='Priority'}, Field{name='Type'}, Field{name='State'}, Field{name='Assignee'}, Field{name='Subsystem'}, Field{name='sprint'}]}, Issue{id='ETC-7', field=[Field{name='projectShortName'}, Field{name='numberInProject'}, Field{name='summary'}, Field{name='created'}, Field{name='updated'}, Field{name='updaterName'}, Field{name='updaterFullName'}, Field{name='reporterName'}, Field{name='reporterFullName'}, Field{name='commentsCount'}, Field{name='votes'}, Field{name='Priority'}, Field{name='Type'}, Field{name='State'}, Field{name='Assignee'}, Field{name='Subsystem'}, Field{name='sprint'}]}]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46276823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档