2016-10-28 16 views
0

用下面的代碼:爲什麼Date對JSON鍵的序列化不同於對JSON值的序列化?

def date = new Date() 
println new groovy.json.JsonBuilder([(date): date]).toString() 

的結果是一樣的東西

{"Fri Oct 28 15:00:45 ART 2016":"2016-10-28T18:00:45+0000"} 

我期待相同的表示爲重點,併爲同一日期值。

我可以強制JsonBuilder輸出具有與值相同格式的鍵嗎?

回答

0

事情是,JsonBuilder將格式化日期默認使用new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"),我明白這不是你想改變的。由於「key」部分是使用toString()方法進行序列化的,因此您有兩種解決方案:使用[date.format("yyyy-MM-dd'T'HH:mm:ssZ"): date]或使用metaProgramming重載Date.toString()(但它將用於每個Date對象,因此您可能不希望這樣)。

+0

感謝您的解決方案。但爲什麼JsonBuilder在上下文中使用toString而在另一箇中使用SimpleDateFormat?有理由嗎? – Fernando

+1

對於鍵(在鍵/值對中),它只是使用通常用'toString()'獲得的鍵對象的默認字符串表示形式,並且沒有理由以不同的方式處理'Date'值。但JSON中的日期_values_應該以JavaScript能夠解析它們的方式進行格式化(請參閱http://stackoverflow.com/questions/10286204/the-right-json-date-format),因此JsonBuilder會將「Date」對象因此。 – sensei