我試圖用Jackson替換Groovy/grails項目中的自定義JSON(德)序列化。序列化的JSON與排序的鍵,使用傑克遜
我很難讓傑克遜輸出一個漂亮打印的JSON,並且按鍵以簡單的「自然」字母順序排序。 我已經試過這(和許多變化):
mymap = [ ... ] // Some groovy map
def mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
def jsonstring = mapper.defaultPrettyPrintingWriter().writeValueAsString(mymap)
但傑克遜固執地生成JSON,其中鍵似乎是隨機順序。 我試着用TreeMap改變'mymap'的類型,在這種情況下,所有的鍵都按照預期正確排序。
我想知道是否有辦法讓排序的密鑰沒有上面的'mymap'更改爲TreeMap(和遞歸地它的所有地圖值...)。
SORT_PROPERTIES_ALPHABETICALLY似乎打算做到這一點,但沒有出於某種原因。你知道這是爲什麼嗎?我在上面做錯了什麼?
我試過用傑克遜1.8.3,1.8.8和1.9.5,相同的結果(隨機密鑰)。
好一點,我錯過了。看起來我可能不得不忘記設置序列化首選項的優雅方式。 – 2012-02-28 09:49:39
你應該可以這樣做:'def jsonstring = mapper.defaultPrettyPrintingWriter()。writeValueAsString(mymap as TreeMap)'不是嗎? – 2012-02-28 10:04:46
沒有,這沒有幫助。 'mymap'的實現不是TreeMap。即使是這樣,我也必須確保'mymap'中的所有其他映射值都是TreeMap,這就是非常棘手的地方。 – 2012-02-29 06:31:43