Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以通过API将一个复杂对象的JSON数据解析为自定义对象_Java_Android_Json - Fatal编程技术网

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

Java 是否可以通过API将一个复杂对象的JSON数据解析为自定义对象,java,android,json,Java,Android,Json,我有一个包含两个Java实体(比如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 me

我有一个包含两个Java实体(比如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
}
然后在框架(比如Jackson)的帮助下解析它,或者我必须为此编写一个自定义类

我的JSON数据如下所示:

{
"E1": {
    "a": "some data",
    .
    .
    .
    "E2": {
        "b": "some data",
        .
        .
        other data
        }
    }
} 
有什么API可以做到这一点吗? 我问这个问题是因为我的web应用程序不只是2个类,而是至少10个相互关联的类,我没有在我的android应用程序中使用它们。所以我不想在android应用程序中复制相同的类


另外,如果您可以建议任何其他可能的方法。

这将是一种非常糟糕的设计实践/方法,使调试变得非常困难,容易出错,而且不具有未来的证据(想想看,如果您在10个类中的一个类中添加一个与另一个类的字段冲突的字段会怎么样?)


无论如何,如果你仍然想用10个类的正确方法来欺骗你,我不知道有哪一个库提供了这个特性。您可以解析json==>10 Java,然后通过该方法合并10,最后将包含所有对象的数据传递给Jackson。

这将是一种非常糟糕的设计实践/方法,使调试变得非常困难,容易出错,而且不能证明未来(想想看,如果在10个类中的一个类中添加一个与另一个类的字段冲突的字段会怎么样?)


无论如何,如果你仍然想用10个类的正确方法来欺骗自己,我不知道有哪一个库提供了这个功能。你可以解析json==>10个Java,然后通过该方法合并10个,最后将包含所有对象的获取结果传递给Jackson。

你最好的选择是使用@JsonAnySetter注释来自接收器POJO上的Jackson库

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);
    }
}
公共类E1{
公共字符串a;
私有映射paramMap=newhashmap();
@JsonAnyGetter
公共映射getParamMap(){
返回参数图;
}
@JSONANYSETER
公共void setParamMap(字符串s,对象o){
(s,o);
}
}
这将把每一个未实现的属性放在一个HashMap中


与@JsonAnyGetter结合使用时,接收方POJO的序列化将产生与JSON输入相同的结果。

您最好在接收方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);
    }
}
公共类E1{
公共字符串a;
私有映射paramMap=newhashmap();
@JsonAnyGetter
公共映射getParamMap(){
返回参数图;
}
@JSONANYSETER
公共void setParamMap(字符串s,对象o){
(s,o);
}
}
这将把每一个未实现的属性放在一个HashMap中


结合@JsonAnyGetter,接收方POJO的序列化将产生与JSON输入相同的结果。

是否要为JSON中所有类型的对象创建一个类?@MichaelSpitsin否但对于特定视图,为什么不创建两个类E1和E2,然后获取JSON字符串并将其传递给Jackson的objectMapper?因为正如我所说的,它不仅仅是两个类,它只是一个例子。我的实体比它复杂得多。一般来说,你有两种可能:使用某种映射(java映射、JsonObject或JsonArray,或库树,如JsonTree),或者使用普通java对象。第二种方法是,您需要为每个Json对象创建类,然后将它们传递给objectMapp或gson,或者其他任何东西。当然,您可以组合这两个变量。您想为Json中的所有类型的对象创建一个类吗?@MichaelSpitsin不,但对于特定视图,为什么不创建两个类呢ses E1和E2然后获取json字符串并将其传递给Jackson的objectMapper?因为正如我所说的,它不仅仅是两个类,它只是一个示例。我的实体比这个复杂得多。一般来说,您有两种可能:使用某种映射(java映射、JsonObject或JsonArray,或库树,如JsonTree),或者使用普通java对象。第二种方法是,您需要为每个Json对象创建类,然后将它们传递给objectMapp或gson,或者其他任何东西。当然,您可以将这两个变量组合起来。是的,我想到了同一件事。进行了研究,但没有得到任何好的方法。所以必须到这里来。是的,我想到了同样的事情。进行了研究,但没有我没有什么好办法,所以不得不来这里