是否可以通过API将一个复杂对象的JSON数据解析为自定义对象

时间:2016-07-20 14:46:06

标签: java android json

我有一个包含2个Java实体(Lets Say E1,E2)的Web项目,就像mybatis和VO一样。

对象结构:

class E1{
   String a;
    .... n other data members
   E2 e2;
}
class E2{
   String b;
   .... n other data members
}

是否可以在Android项目中创建一个类,即

class E1 {
    String a;
    String b; //This Data member belongs to class E2
}

并在框架(如杰克逊)的帮助下解析它,或者我必须为此编写一个自定义类?

我的JSON数据将如下所示:

{
"E1": {
    "a": "some data",
    .
    .
    .
    "E2": {
        "b": "some data",
        .
        .
        other data
        }
    }
} 

有没有API可以做到这一点? 我问这个是因为我的网络应用程序不仅仅是2个类,而是至少10个互连的类,我不是在我的Android应用程序中使用它们。因此,不要在Android应用程序中复制相同的类。

此外,如果您可以提出任何其他可能的建议方式。

2 个答案:

答案 0 :(得分:0)

这将是一个非常糟糕的设计实践/方法,使得调试非常困难,容易出错并且不会出现未来证明(考虑一下,如果你添加到10个类中的一个,那该怎么办?与另一个类'字段冲突的字段?)。

无论如何,如果你仍然想要使用正确的方法,那就是有10个类,我不知道有任何lib提供这个功能。你可以解析json ==> 10 Java Map,然后通过Map方法合并10 Map::putAll,最后将包含所有对象的获取Map传递给Jackson。

答案 1 :(得分:0)

您最好的选择是在接收器POJO上使用Jackson库中的@JsonAnySetter注释。

public class E1{
    public String a;
    private Map<String, Object> paramMap = new HashMap<>();

    @JsonAnyGetter
    public Map<String, Object> getParamMap() {
        return paramMap;
    }
    @JsonAnySetter
    public void setParamMap(String s, Object o) {
        paramMap.put(s, o);
    }
}

这会将每个未实现的属性放在HashMap中。

与@JsonAnyGetter结合使用,接收器POJO的序列化将提供与JSON输入相同的结果。