Android 将带有嵌套对象的JSON对象展平到展平字段
我使用Android的Room和Jackson将传入的JSONObject/JSONArray持久化为POJO/实体 从一个终点,我得到了以下形式的回复:Android 将带有嵌套对象的JSON对象展平到展平字段,android,serialization,jackson,android-room,Android,Serialization,Jackson,Android Room,我使用Android的Room和Jackson将传入的JSONObject/JSONArray持久化为POJO/实体 从一个终点,我得到了以下形式的回复: { "id": 1, "name": "name" "dob": 12421414, "address": { "number": 11, "street":"some street", "City": "A city" } } 我想将POJO中的“地址”嵌套JSON对象反序列化为一个简单的一维
{
"id": 1,
"name": "name"
"dob": 12421414,
"address": {
"number": 11,
"street":"some street",
"City": "A city"
}
}
我想将POJO中的“地址”嵌套JSON对象反序列化为一个简单的一维对象/实体,如图所示:
@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”)并分配字段。使用Gson库可以很容易地解决您的问题 1.首先在build.gradle文件中添加对此的依赖项-
implementation 'com.google.code.gson:gson:2.8.5'
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;
}
Gson gson = new Gson();
MyEntity entity= gson.fromJson(br, MyEntity.class);
4.全部完成,现在访问pojo-
Log.d("Data",entity.name);
您可以通过实现地址设置器方法进行反序列化 在
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();
}
@embedded是最简单的方法,效果很好。您是否尝试过添加@embedded(prefix=“address”)?您没有用“public address;”来回答问题。他不想要地址。