使用GSON将POJO反序列化为JSON时将字段名称更改为小写?

时间:2019-03-11 20:10:39

标签: java json gson

我有一个像这样的POJO类。我首先将我的JSON反序列化为POJO以下。.

public class Segment implements Serializable {
  @SerializedName("Segment_ID")
  @Expose
  private String segmentID;
  @SerializedName("Status")
  @Expose
  private String status;
  @SerializedName("DateTime")
  @Expose
  private String dateTime;
  private final static long serialVersionUID = -1607283459113364249L;

  ...
  ...
  ...

  // constructors
  // setters
  // getters
  // toString method
}

现在,我正在使用Gson将POJO序列化为JSON,并且工作正常:

Gson gson = new GsonBuilder().create();
String json = gson.toJson(user.getSegments());
System.out.println(json);

我得到这样打印的json很好:

[{"Segment_ID":"543211","Status":"1","DateTime":"TueDec2618:47:09UTC2017"},{"Segment_ID":"9998877","Status":"1","DateTime":"TueDec2618:47:09UTC2017"},{"Segment_ID":"121332121","Status":"1","DateTime":"TueDec2618:47:09UTC2017"}]

现在反序列化时有什么方法可以将“ Segment_ID”转换为所有小写字母吗?我的意思是“ Segment_ID”应为“ segment_id”,“状态”应为“状态”。使用gson可以做到吗?因此应该改为这样打印。

[{"segment_id":"543211","status":"1","datetime":"TueDec2618:47:09UTC2017"},{"segment_id":"9998877","status":"1","datetime":"TueDec2618:47:09UTC2017"},{"segment_id":"121332121","status":"1","datetime":"TueDec2618:47:09UTC2017"}]

如果我更改“ SerializedName”,然后在将JSON反序列化为POJO时无法正常工作,因此不确定是否还有其他方法。

1 个答案:

答案 0 :(得分:1)

您需要为反序列化过程提供替代名称,并为序列化提供主(value属性)。

class Segment {

    @SerializedName(value = "segment_id", alternate = {"Segment_ID"})
    @Expose
    private String segmentID;

    @SerializedName(value = "status", alternate = {"Status"})
    @Expose
    private String status;

    @SerializedName(value = "datetime", alternate = {"DateTime"})
    @Expose
    private String dateTime;

}

现在,您可以反序列化字段:Segment_IDDateTimeStatus,并且仍然能够根据需要进行序列化。