Java 使用Jackson将复杂的JSON转换为一级POJO
让我们假设您拥有以下JSON:Java 使用Jackson将复杂的JSON转换为一级POJO,java,json,jackson,Java,Json,Jackson,让我们假设您拥有以下JSON: { "prop0": "value0", "level1" : { "prop1": "value1" "prop2": "value2" }, .... } 它可以变成简单的Java对象吗 class Pojo { private String prop0; private String prop1; private String prop2; } 我不想创建一个中间类来包装“level1” 我想到的是
{
"prop0": "value0",
"level1" : {
"prop1": "value1"
"prop2": "value2"
},
....
}
它可以变成简单的Java对象吗
class Pojo {
private String prop0;
private String prop1;
private String prop2;
}
我不想创建一个中间类来包装“level1”
我想到的是以这种方式绘制我的班级地图:
class Pojo {
private String prop0;
@JsonProperty("level1.prop1")
private String prop1;
@JsonProperty("level1.prop2")
private String prop2;
}
但不幸的是,它不起作用。反问题-将复杂Java对象转换为普通JSON可以使用@JsonUnwrapped
注释简单地解决
您能为我的问题提出任何可行的解决方案吗?您需要编写一个自定义反序列化程序,或者添加一个可以转换结构的setter。对于后者,您可以执行以下操作
...
public void setLevel1(Map<String,String> values) { // or JsonNode
prop1 = values.get("prop1");
// and so forth; if names are regular, can use looping
}
。。。
public void setLevel1(映射值){//或JsonNode
prop1=values.get(“prop1”);
//等等;如果名称是规则的,可以使用循环
}
您需要编写一个自定义反序列化程序,或者添加一个可以转换结构的setter。对于后者,您可以执行以下操作
...
public void setLevel1(Map<String,String> values) { // or JsonNode
prop1 = values.get("prop1");
// and so forth; if names are regular, can use looping
}
。。。
public void setLevel1(映射值){//或JsonNode
prop1=values.get(“prop1”);
//等等;如果名称是规则的,可以使用循环
}
您可以使用自定义反序列化程序。JSON的根目录中还有什么?@SotiriosDelimanolis当然JSON对象更复杂。我只是简化了结构,因为它对问题不重要。对于解决方案,我想提出它。我不需要知道细节,只需要知道根目录中是否有其他键值对。@Mena Of I可以使用自定义反序列化程序,但这会使代码理解复杂化。注释更受欢迎。您可以使用自定义反序列化程序。JSON的根中还有什么?@SotiriosDelimanolis当然JSON对象更复杂。我只是简化了结构,因为它对问题不重要。对于解决方案,我想提出它。我不需要知道细节,只需要知道根目录中是否有其他键值对。@Mena Of I可以使用自定义反序列化程序,但这会使代码理解复杂化。注释更受欢迎。