如何使用javajackson重命名JSON的根键?
我正在使用Jackson 1.9.1,从Scala到marshall对象再到JSON。我的编组代码如下所示:如何使用javajackson重命名JSON的根键?,java,jackson,Java,Jackson,我正在使用Jackson 1.9.1,从Scala到marshall对象再到JSON。我的编组代码如下所示: val mapper = new ObjectMapper() mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true) mapper.setPropertyNamingStrategy(new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy()
val mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true)
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy())
val introspectorPair = new AnnotationIntrospector.Pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector()
)
mapper.getSerializationConfig().withAnnotationIntrospector(introspectorPair)
val writer = mapper.defaultPrettyPrintingWriter
writer.writeValueAsString(this)
{
"SalesOrder" : {
"id" : "3187e7d0-f84f-11e0-be50-0800200c9a66",
"total_paid" : 8.99,
"created_at" : "2011-05-14T00:00:00.000+0300",
"updated_at" : "2011-05-14T00:00:00.000+0300"
}
}
生成的典型JSON如下所示:
val mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true)
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy())
val introspectorPair = new AnnotationIntrospector.Pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector()
)
mapper.getSerializationConfig().withAnnotationIntrospector(introspectorPair)
val writer = mapper.defaultPrettyPrintingWriter
writer.writeValueAsString(this)
{
"SalesOrder" : {
"id" : "3187e7d0-f84f-11e0-be50-0800200c9a66",
"total_paid" : 8.99,
"created_at" : "2011-05-14T00:00:00.000+0300",
"updated_at" : "2011-05-14T00:00:00.000+0300"
}
}
我的问题是:如何将根键从SalesOrder重命名为更为JavaScript友好的SalesOrder?在我的类定义上方添加JsonProperty重写不起作用-可能是因为根键不是严格意义上的属性,因此也没有应用SetPropertyNamegStrategy
对于如何实现这一目标的任何指导,我们都深表感激 在使用JaxbAnnotationIntrospector时,您可以使用JAXB annotation@XmlRootElement,也可以在org.codehaus.Jackson.map.annotate1中使用Jackson自己的@JsonRootName
或者,如果您想在没有注释的情况下完成此操作,也可以将AnnotationIntrospector的一个子类化,并覆盖findRootName。。。方法-这是确定要使用的名称的方法,通常是通过注释,但您可以实现您想要的任何自定义逻辑。您可以在使用JaxbAnnotationIntrospector时使用JAXB annotation@XmlRootElement,也可以在org.codehaus.Jackson.map.annotate1中使用Jackson自己的@JsonRootName
或者,如果您想在没有注释的情况下完成此操作,也可以将AnnotationIntrospector的一个子类化,并覆盖findRootName。。。方法-这是确定要使用的名称的方法,通常是通过注释,但您可以实现任何您想要的自定义逻辑。谢谢@StaxMan,这非常有效。我选择了@XmlRootElement选项。谢谢@StaxMan,效果很好。我选择了@XmlRootElement选项。