Есть ли способ кодировать конструкторы объектов с помощью модуля Perl JSON? - PullRequest
2 голосов
/ 15 ноября 2010

Все,

Я использую Perl-модуль JSON для кодирования JSON.

Я бы хотел, чтобы полученный JSON включал в себя такие строки:

{
   "startDate": new Date(2010,11,15,0,0),
   "aString"  : "String Data",
   "aNumber"  : 1234
}

Чтобы создать это, у меня есть Perl HASHREF, подобный этому:

{
   startDate => SEE BELOW,
   aString   => "String Data",
   aNumber   => 1234,
}

Вот моя проблема: я не могу понять, как заставить модуль JSON печатать строки без кавычек, чтобы я мог включить мой вызов new Date(...).Я пытался создать модуль Perl с помощью метода TO_JSON, но вывод по-прежнему заключался в кавычки.

Есть ли у кого-нибудь какие-либо предложения о том, как заставить JSON печатать строки без кавычек?

Ответы [ 3 ]

5 голосов
/ 15 ноября 2010

JSON не предназначен для кодирования таких объектов.Он кодирует простые структуры данных, такие как массивы и хэши.Если затем вы хотите использовать эти десериализованные данные для заполнения благословенного объекта, вам нужно добавить еще один слой сверху.

Для Moose объектов, плагин MooseX :: Storage построен специально для этой цели.

3 голосов
/ 15 ноября 2010

То, что вы хотите, недопустимо в JSON.См. http://www.json.org/, что является допустимым значением в JSON.Я бы вернул дату в виде массива, а затем использовал бы ее в своем обработчике js для создания объекта Date.

2 голосов
/ 15 ноября 2010

Возможно, вам следует переосмыслить свой подход к этой проблеме, скажем, оставив модуль JSON в покое, но постобработав его вывод?Например, придумайте некоторое соглашение, чтобы показать, что получатель должен сделать что-то особенное с вводом:

{
   "startDate": "EVAL:new Date(2010,11,15,0,0)",
   "aString"  : "String Data",
   "aNumber"  : 1234
}

Пусть получатель (Perl? JavaScript?) Ищет значения хеш-функции, которые начинаются с ключевого слова "EVAL:" и выполните дальнейшую обработку этого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...