我正在使用Android的Room和Jackson来将传入的JSONObjects / JSONArrays持久存储为POJO /实体。
从一个终点来看,我收到以下形式的回复:
{
"id": 1,
"name": "name"
"dob": 12421414,
"address": {
"number": 11,
"street":"some street",
"City": "A city"
}
}
我想将“地址”嵌套的JSON对象反序列化为POJO作为简单的一维对象/实体,如下所示:
@Entity
public class myEntity{
@PrimaryKey
@NotNull
private int id;
private String name;
private int dob;
//Address flattened:
private int addressNumber;
private String addressStreet;
private String addressCity;
//Getters and setters
}
我该如何处理?好像我想调用一个方法来获取@JsonProperty(“ address”)并分配字段。
答案 0 :(得分:0)
为此使用Gson库,很容易解决您的目的。
1。首先在build.gradle文件中添加对此的依赖-
implementation 'com.google.code.gson:gson:2.8.5'
根据您的情况从json创建一个类,该类为:
public class MyEntity{
@SerializedName("id")
@Expose
public int id;
@SerializedName("name")
@Expose
public String name;
@SerializedName("dob")
@Expose
public int dob;
@SerializedName("address")
@Expose
public Address address;
}
3。设置Pojo:
Gson gson = new Gson();
MyEntity entity= gson.fromJson(br, MyEntity.class);
4。现在完成所有操作即可访问pojo-
Log.d("Data",entity.name);
答案 1 :(得分:0)
您可以通过实现地址设置器方法反序列化。
在myEntity
类中添加此setter方法:
@JsonSetter
public void setAddress(JsonNode text){
this.addressNumber = text.get("number").asInt();
this.addressStreet = text.get("street").asText();
this.addressCity = text.get("City").asText();
}
答案 2 :(得分:0)
@embedded是最简单的方法,效果很好。