Доброе утро, ребята!
У меня есть строки JSON, которые выглядят так:
{
"StatusCode":0,
"Message":null,
"ExecutionTime":0,
"ResponseData":[
{"Name":"name1","SiteId":"1234","Type":"Type1","X":"1234567","Y":"123456"},
{"Name":"Name2","SiteId":"2134","Type":"Type2","X":"1234567","Y":"1234567"},
{"Name":"Name3","SiteId":"3241","Type":"Type3","X":"1234567","Y":"1234567"},
{"Name":"Name4","SiteId":"4123","Type":"Type4","X":"123456","Y":"123456"}
]
}
Я хочу создать объект, в котором я могу получить значения X
и Y
.
Я пытался использовать Джексона для сериализации строки JSON, но безуспешно. Я создал два дополнительных класса для использования Джексоном. Один класс для верхнего слоя, StatusCode
, Message
, ExecutionTime
и ResponseData
, который выглядит как
public class PL {
private Long statusCode;
private String executionTime;
private String message;
private ResponseData responseData;
public PL(){
}
public void setStatusCode(Long statusCode){
this.statusCode = statusCode;
}
public Long getStatusCode(){
return this.statusCode;
}
public void setExecutionTime(String executionTime){
this.executionTime = executionTime;
}
public String getExecutionTime(){
return this.executionTime;
}
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return this.message;
}
public void setResponseData(ResponseData responseData){
this.responseData = responseData;
}
public ResponseData getResponseData(){
return this.responseData;
}
}
Где ReponseData
возвращается как объект, а затем у меня есть другой класс для сериализации ResponseData
, который выглядит как
public class ResponseData {
private String name;
private String siteId;
private String type;
private String x;
private String y;
public ResponseData(){
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setSiteId(String siteId){
this.siteId = siteId;
}
public String getSiteId(){
return this.siteId;
}
public void setType(String type){
this.type = type;
}
public String setType(){
return this.type;
}
public void setX(String x){
this.x = x;
}
public String getX(){
return this.x;
}
public void setY(String y){
this.y = y;
}
public String getY(){
return this.y;
}
}
Затем я создаю ObjectMapper
с
private final static ObjectMapper mapper = new ObjectMapper();
и попытайтесь прочитать значения с помощью
ResponseData e = mapper.readValue(result.toString(), ResponseData.class);
и в итоге получим исключение
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: нераспознанное поле «StatusCode» (класс MyClass.ResponseData), не помеченное как игнорируемое (5 известных свойств: «x», «y», «siteId», «name» "," type "])
как будто он не может разобрать первую запись, StatusMessage
. Даже если я удаляю второй класс и пытаюсь проанализировать только первые четыре записи, в которых я возвращаю ResponseData
как String
, я все равно получаю то же исключение.