Java 是否可以通过API将一个复杂对象的JSON数据解析为自定义对象
我有一个包含两个Java实体(比如E1、E2)的web项目,比如mybatis和VO的工作方式 对象结构: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
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,或者其他任何东西。当然,您可以将这两个变量组合起来。是的,我想到了同一件事。进行了研究,但没有得到任何好的方法。所以必须到这里来。是的,我想到了同样的事情。进行了研究,但没有我没有什么好办法,所以不得不来这里