2016-07-09 5 views
2

Ich versuche, JSON-String in Java-Bean mit Gson zu konvertieren, aber es ist Rückgabe Nullwert.Gson Konvertierung zurückgeben null Java-Objekt

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

Meine Bohnenklasse folgt. 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 + '\'' + 
      '}'; 
}} 

Ich erhalte Nullwert nach JSON-String zu Java-Objekt zu konvertieren. was ich falsch mache, bitte schlage mich vor. Vielen Dank im Voraus.

+0

Versuchen Sie diese Json nach dem Entfernen von Körper und Antwort, da Ihre Klassenstruktur das nicht behandelt. –

+0

Ich kann JSON-Format nicht ändern, weil es vom Server kommt. – MKY

Antwort

2

Voraussetzungen helfen können:

Folge JSON wurde durchgeführt:

{ 
    "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" 
     } 
    } 
} 

Schritt 1:

die Deklaration von private List<FileListDTO> fileList in RecordingListResponseDTO.java wie folgt ändern:

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

Schritt 2:

definieren folgende Klasse 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); 
     } 
    } 

} 

Schritt 3:

die Methode ändern convert(String args) wie folgt:

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

Für Testzwecke können Sie versuchen, die JSON in einer Datei, dh die Speicherung D:/test.json und rufen Sie die Methode durch:

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

Hallo @MKY ist Ihr Problem gelöst? –

+0

Ich werde versuchen und lassen Sie wissen ... morgen .. – MKY

+0

Eine weitere Sache, wenn ich Datum als String verwenden möchte. Ist es notwendig, DateTypeAdapter Klasse zu verwenden ..? – MKY

1

etwas, das man die Modelle Klasse ändern müssen wie,

zunächst in Ihrer json Antwortdaten enthält „body“ -Tag, der darstellt, zu widersprechen ist, zunächst müssen Sie die Klasse für das Objekt-Tag erstellen, dann sind alle Daten enthält innen Ihre "body" -Tag, analysieren so alle innerhalb von Daten von Körperdaten,

diesen 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; 
     } 
    } 
    } 
} 
+0

aber wie dieser Körper enthält auch Antwort und Antwort enthalten insgesamt, num und Dateiliste .. – MKY

+1

@MKY Ihre Parsing die Daten von der "Antwort" -Tag, so dass Sie nicht die Daten erhalten, ändern Sie den Code als Parsing von "Körper" Etikett. – prakash

+0

Eine weitere Anforderung an u..therè ist eine weitere Möglichkeit, wenn es nur eine Dateiliste gibt, die im Objektformat nicht im Array von Objekt enthalten ist. In diesem Fall kann gson nicht parsen.wie geht das? – MKY