Android 将带有嵌套对象的JSON对象展平到展平字段

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对象反序列化为一个简单的一维

我使用Android的Room和Jackson将传入的JSONObject/JSONArray持久化为POJO/实体

从一个终点,我得到了以下形式的回复:

{
  "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'
  • 根据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);
    

    您可以通过实现地址设置器方法进行反序列化

    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;”来回答问题。他不想要地址。