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

时间:2018-08-10 08:40:59

标签: android serialization jackson android-room

我正在使用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”)并分配字段。

3 个答案:

答案 0 :(得分:0)

为此使用Gson库,很容易解决您的目的。

1。首先在build.gradle文件中添加对此的依赖-

 implementation 'com.google.code.gson:gson:2.8.5'
  1. 根据您的情况从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是最简单的方法,效果很好。