2016-10-28 3 views
0

С помощью следующего кода:Почему дата сериализуется для ключа 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

Thing is, JsonBuilder будет форматировать даты, используя по умолчанию new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"), и я понимаю, что это не то, что вы хотите изменить. Поскольку «ключевая» часть сериализована с помощью метода toString(), у вас есть два решения: либо используйте [date.format("yyyy-MM-dd'T'HH:mm:ssZ"): date], либо используйте метапрограммирование для перегрузки Date.toString() (он будет использоваться для каждого объекта Date, хотя, возможно, вам этого не понадобится).

+0

Спасибо за решение. Но почему JsonBuilder использует toString в контексте и SimpleDateFormat в другом? Есть ли причина? – Fernando

+1

Для ключей (в парах ключ/значение) он просто использует строковое представление по умолчанию для ключевого объекта, которое обычно получается с помощью 'toString()', и нет смысла рассматривать значения «Date» по-разному. Но дата _values_ в JSON должна быть отформатирована таким образом, чтобы javascript смог их проанализировать (см. Http://stackoverflow.com/questions/10286204/the-right-json-date-format), и поэтому JsonBuilder рассматривает объекты Date соответственно. – sensei