是否有可能与杰克逊一起获得嵌套子的JsonRootName?
问题描述:
我有嵌套的对象,当我使用jackson将它序列化为json时,我想获得根名称。这就是我想要的结果(我道歉,所有的花卉爱好者只是需要一个例子,这是不应该被解释为准确的数据):是否有可能与杰克逊一起获得嵌套子的JsonRootName?
{
"plants": "flowers",
"types": {
"rose" : {
"color": "red",
"height": 25,
}
}
}
我有2类,一个包装类:
public class JsonWrapper {
public String plants = "flowers";
public Object types;
}
和 “花” 类:
@JsonRootName("rose")
public class rose{
public String color = "red";
public int height = 25;
}
现在我要做的就是这样的:
JsonWrapper wrapper = new JsonWrapper();
wrapper.types = new rose();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
String jsonInString = mapper.writeValueAsString(wrapper);
结果我得到的是:
{
"JsonWrapper":{
"plants": "flowers",
"types": {
"color": "red",
"height": 25,
}
}
}
所以我对于没有被标注,但不被注释子对象的包装对象,获取根名称。有没有办法告诉杰克逊没有得到一个没有根名的地方,还要分析子对象?
答
没有JsonRootName
的替代解决方案。
JsonWrapper.java
import java.util.HashMap;
import java.util.Map;
public class JsonWrapper {
public String plants = "flowers";
Map<String, Flower> types = new HashMap<>();
public Map<String, Flower> getTypes() {
return types;
}
public void setTypes(Map<String, Flower> types) {
this.types = types;
}
}
Flower.java
public class Flower {
public String color = "red";
public int height = 25;
}
Main.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws JsonProcessingException {
JsonWrapper wrapper = new JsonWrapper();
wrapper.getTypes().put("rose", new Flower());
ObjectMapper mapper = new ObjectMapper();
String jsonInString = mapper.writeValueAsString(wrapper);
System.out.println(jsonInString);
}
}
是否存在需要使用'JsonRootName'的约束?没有这个可以完成。 –
感谢awnser Deendayal,我不需要使用'JsonRootName'只是认为它存在的那个exakt目的。我明天会尝试你的解决方案。 – user1593846