如何用Java Jackson重命名JSON的根密钥?
问题描述:
我使用Scala的Jackson 1.9.1将对象编组为JSON。我的编组的代码如下所示:如何用Java Jackson重命名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)
一个典型的JSON本步骤是这个样子的:
{
"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 - 友好的“sales_order”?在我的类定义上面添加一个JsonProperty
覆盖不起作用 - 大概是因为根密钥不是严格的属性(因此setPropertyNamingStrategy()
也没有被应用)?
任何指导如何实现这个感激的接收!
答
您可以使用JAXB注释@XmlRootElement
(使用JaxbAnnotationIntrospector时,您在此处)或Jackson自己的@JsonRootName
(位于org.codehaus.jackson.map.annotate1
)。
或者,如果你想这样做没有注释,也可以对AnnotationIntrospector的子类进行子类化并覆盖findRootName(...)
方法 - 这是通常从注释中算出名称的方法,但是你可以实现任何自定义逻辑想。
谢谢@StaxMan,这很好。 (我用'@ XmlRootElement'选项去了)。 –