簡體   English   中英

如何使用Java Jackson重命名JSON的根密鑰?

[英]How do I rename the root key of a JSON with Java Jackson?

我正在使用Scala的Jackson 1.9.1將對象編組為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(...)方法 - 這就是要使用的名稱,通常來自注釋,但您可以實現任何自定義邏輯你要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM