There was a problem using Jackson to use JSON serialization in Java

Good morning, man!

I have a JSON string that looks like:

{
   "StatusCode":0,"Message":null,"ExecutionTime":0,"ResponseData":[
        {"Name":"name1","SiteId":"1234","Type":"Type1","X":"1234567","Y":"123456"},{"Name":"Name2","SiteId":"2134","Type":"Type2","Y":"1234567"},{"Name":"Name3","SiteId":"3241","Type":"Type3",{"Name":"Name4","SiteId":"4123","Type":"Type4","X":"123456","Y":"123456"}
    ]
}

I want to create an object that can retrieve X and Y values

I've been trying to serialize JSON strings using Jackson, but I didn't succeed I created two additional courses for Jackson The top-level classes, statuscode, message, executiontime and responsedata, look like

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;
}
}

Where reponsedata is returned as an object, and then I have another class for serializing responsedata, which looks like

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;
}
}

Then I create an objectmapper

private final static ObjectMapper mapper = new ObjectMapper();

And try to read the value in this way

ResponseData e = mapper.readValue(result.toString(),ResponseData.class);

And eventually get an exception

It seems that it cannot resolve the first entry statusmessage Even if I delete the second class and only try to parse the first four entries, I return responsedata as a string, and I still get the same exception

Solution

First, you should have a list < responsedata > in PL, which is not a simple responsedata attribute As you can see, in JSON, responsedata is an array "responsedata": [...] so it will be deserialized to list Each element of the list is a responsedata object that you define

Then you encounter a case problem. You don't have uppercase JSON in the class attribute You can use @ jsonproperty (see API) annotation to overcome this problem, as follows:

class PL {
    @JsonProperty("StatusCode")
    private Long statusCode;
    @JsonProperty("ExecutionTime")
    private String executionTime;
    @JsonProperty("Message")
    private String message;
    @JsonProperty("ResponseData")
    private List<ResponseData> responseDatas;

    public PL(){
    }

    // getters/Setters  

}


class ResponseData {

    @JsonProperty("Name")
    private String name;
    @JsonProperty("SiteId")
    private String siteId;
    @JsonProperty("Type")
    private String type;
    @JsonProperty("X")
    private String x;
    @JsonProperty("Y")
    private String y;

    public ResponseData(){
    }

    // getters/Setters  

}

Then read your JSON as a pl object, as follows:

ObjectMapper mapper = new ObjectMapper();
PL pl = mapper.readValue(json,PL.class);
for(ResponseData rd : pl.getResponseDatas()) {
    System.out.println(rd.getX());
    System.out.println(rd.getY());
}

This output:

1234567
123456
1234567
1234567
1234567
1234567
123456
123456
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>