简体   繁体   中英

Gson conversion returning null java object

I am trying to convert json string in java bean using Gson but it is returnig null value.

public static void convert(String args) {
    String json =
                "{"body":{"response":{"total":"294","num":"294","filelist":[{"id":"56712","camname":"Camera1","camid":"514","start":"2016-07-08 12:00:38","end":"2016-07-08 12:03:00","stream":"3","recReason":"Activity","filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.mrv","snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.jpg","nvrip":"192.168.0.200:8095"},{"id":"56708","camname":"Camera1","camid":"514","start":"2016-07-08 11:58:14","end":"2016-07-08 12:00:36","stream":"3","recReason":"Activity","filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.mrv","snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.jpg","nvrip":"192.168.0.200:8095"},{"id":"56705","camname":"Camera1","camid":"514","start":"2016-07-08 11:55:49","end":"2016-07-08 11:58:11","stream":"3","recReason":"Activity","filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.mrv","snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.jpg","nvrip":"192.168.0.200:8095"},{"id":"56702","camname":"Camera1","camid":"514","start":"2016-07-08 11:53:25","end":"2016-07-08 11:55:47","stream":"3","recReason":"Activity","filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.mrv","snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.jpg","nvrip":"192.168.0.200:8095"},{"id":"56699","camname":"Camera1","camid":"514","start":"2016-07-08 11:51:00","end":"2016-07-08 11:53:22","stream":"3","recReason":"Activity","filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.mrv","snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.jpg","nvrip":"192.168.0.200:8095"}],"status":"OK"}}}";

    // Now do the magic.
    RecordingListResponseDTO data = new Gson().fromJson(json, RecordingListResponseDTO .class);

    // Show it.
    System.out.println("converted data :"+data);
}

My Bean Class is following. RecordingListResponseDTO

   public class RecordingListResponseDTO implements Serializable {
    private String status;
    private int total;
    private int num;
    List<FileListDTO> fileList;

    public RecordingListResponseDTO(){

    }
    public RecordingListResponseDTO(String status, int total, int num, List<FileListDTO> fileList) {
        this.status = status;
        this.total = total;
        this.num = num;
        this.fileList = fileList;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public List<FileListDTO> getFileList() {
        return fileList;
    }

    public void setFileList(List<FileListDTO> fileList) {
        this.fileList = fileList;
    }

    @Override
    public String toString() {
        return "RecordingListResponseDTO{" +
                "status='" + status + '\'' +
                ", total=" + total +
                ", num=" + num +

                ", fileList=" + fileList +
                '}';
    }}

FileListDTO.java

public class FileListDTO {
private int id;
private String camname;
private int camid;
private Date start;
private Date end;
private int stream;
private String recReason;
private String filename;
private String snapshot;
private String nvrip;

public FileListDTO(int id, String camname, Date start, int camid, Date end, int stream, String recReason, String filename, String snapshot, String nvrip) {
    this.id = id;
    this.camname = camname;
    this.start = start;
    this.camid = camid;
    this.end = end;
    this.stream = stream;
    this.recReason = recReason;
    this.filename = filename;
    this.snapshot = snapshot;
    this.nvrip = nvrip;
}

public int getId() {
    return id;
}

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

public String getCamname() {
    return camname;
}

public void setCamname(String camname) {
    this.camname = camname;
}

public int getCamid() {
    return camid;
}

public void setCamid(int camid) {
    this.camid = camid;
}

public Date getStart() {
    return start;
}

public void setStart(Date start) {
    this.start = start;
}

public Date getEnd() {
    return end;
}

public void setEnd(Date end) {
    this.end = end;
}

public int getStream() {
    return stream;
}

public void setStream(int stream) {
    this.stream = stream;
}

public String getRecReason() {
    return recReason;
}

public void setRecReason(String recReason) {
    this.recReason = recReason;
}

public String getFilename() {
    return filename;
}

public void setFilename(String filename) {
    this.filename = filename;
}

public String getSnapshot() {
    return snapshot;
}

public void setSnapshot(String snapshot) {
    this.snapshot = snapshot;
}

public String getNvrip() {
    return nvrip;
}

public void setNvrip(String nvrip) {
    this.nvrip = nvrip;
}

@Override
public String toString() {
    return "FileListDTO{" +
            "id=" + id +
            ", camname='" + camname + '\'' +
            ", camid=" + camid +
            ", start=" + start +
            ", end=" + end +
            ", stream=" + stream +
            ", recReason='" + recReason + '\'' +
            ", filename='" + filename + '\'' +
            ", snapshot='" + snapshot + '\'' +
            ", nvrip='" + nvrip + '\'' +
            '}';
}}

I am getting null value after converting Json string to Java object. what I am doing wrong please suggest me. Thank in advance.

Prerequisites:

Following JSON has been used:

{
   "body":{
      "response":{
         "total":294,
         "num":294,
         "filelist":[
            {
               "id":56712,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 12:00:38",
               "end":"2016-07-08 12:03:00",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.mrv",
               "snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56708,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:58:14",
               "end":"2016-07-08 12:00:36",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.mrv",
               "snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56705,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:55:49",
               "end":"2016-07-08 11:58:11",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.mrv",
               "snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56702,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:53:25",
               "end":"2016-07-08 11:55:47",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.mrv",
               "snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56699,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:51:00",
               "end":"2016-07-08 11:53:22",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.mrv",
               "snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.jpg",
               "nvrip":"192.168.0.200:8095"
            }
         ],
         "status":"OK"
      }
   }
}

Step 1:

Modify the declaration of private List<FileListDTO> fileList in RecordingListResponseDTO.java as follows:

@SerializedName("filelist")
private List<FileListDTO> fileList

Step 2:

Define following class MyDateTypeAdapter.java :

import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class MyDateTypeAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {

    private DateFormat dateFormat;

    public MyDateTypeAdapter() {
        dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); 
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    }

    @Override
    public synchronized JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) {
        return new JsonPrimitive(dateFormat.format(date));
    }

    @Override
    public synchronized Date deserialize(JsonElement jsonElement, Type type,
            JsonDeserializationContext jsonDeserializationContext) {
        try {
            return dateFormat.parse(jsonElement.getAsString());
        } catch (ParseException e) {
            throw new JsonParseException(e);
        }
    }

}

Step 3:

Modify the method convert(String args) as follows:

public static void convert(String args) {
        JsonParser parser = new JsonParser();
        String json = parser.parse(args)
                            .getAsJsonObject()
                            .getAsJsonObject("body")
                            .getAsJsonObject("response")
                            .toString();

        // Now do the magic.
        RecordingListResponseDTO data = new GsonBuilder()
                 .registerTypeAdapter(Date.class, new MyDateTypeAdapter())
                .create().fromJson(json, RecordingListResponseDTO.class);
        // Show it.
        System.out.println("converted data :"+data);
}

For testing purpose, you may try storing the JSON in a file ie D:/test.json and call the method by:

String json = new String(Files.readAllBytes(Paths.get("D:/test.json")));
convert(json); 

something you need to change the models class like,

Initially in your json response data contains "body" tag that's represents to object, initially you need to create the class for object tag,then all data contains inside your "body" tag, so parse all data inside from body data,

may help this code,

public class RecordingListResponseDTO implements Serializable {
  Recordinglist body;

  public class Recordinglist(){
    Recordresponse response;

     public class Recordresponse(){
       String total;

       public int getTotal() {
          return total;
       }

       public void setTotal(int total) {
          this.total = total;
       }
    }
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM