是否有可能与杰克逊一起获得嵌套子的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,      
    } 
} 
} 

所以我对于没有被标注,但不被注释子对象的包装对象,获取根名称。有没有办法告诉杰克逊没有得到一个没有根名的地方,还要分析子对象?

+0

是否存在需要使用'JsonRootName'的约束?没有这个可以完成。 –

+0

感谢awnser Deendayal,我不需要使用'JsonRootName'只是认为它存在的那个exakt目的。我明天会尝试你的解决方案。 – user1593846

没有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); 

    } 
}