Просто чтобы расширить ответ casperOne .
Спецификация JSON не учитывает значения даты. MS пришлось сделать вызов, и путь, который они выбрали, заключался в том, чтобы использовать небольшую хитрость в представлении строк в javascript: строковый литерал "/" такой же, как "\ /", а строковый литерал будет никогда сериализуется в "\ /" (даже "\ /" должно быть сопоставлено с "\\ /").
См. http://msdn.microsoft.com/en-us/library/bb299886.aspx#intro_to_json_topic2 для лучшего объяснения (прокрутите вниз до «От литералов JavaScript до JSON»)
Одна из больных точек JSON - это
отсутствие даты / времени буквального. Много
люди удивлены и разочарованы
чтобы узнать это, когда они впервые
встретить JSON. Простое объяснение
(утешительно или нет) за отсутствие
литерал даты / времени в том, что JavaScript
никогда не было ни одного: поддержка
значения даты и времени в JavaScript
полностью предоставлено через Дата
объект. Большинство приложений используют JSON
как формат данных, поэтому, как правило,
как правило, использовать строку или
номер для выражения даты и времени
ценности. Если используется строка, вы можете
как правило, ожидайте, что это будет в ISO
8601 формат. Если номер используется,
вместо этого значение обычно
принято означать количество
миллисекунды в универсальной координации
Время (UTC) с эпохи, где эпоха
определено как полночь 1 января 1970 г.
(УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ). Опять же, это просто
конвенция, а не часть JSON
стандарт. Если вы обмениваетесь данными
с другим приложением, вы будете
нужно проверить свою документацию, чтобы увидеть
как он кодирует значения даты и времени
внутри литерала JSON. Например,
Microsoft ASP.NET AJAX не использует ни
из описанных конвенций. Скорее,
он кодирует значения .NET DateTime как
Строка JSON, где содержимое
строка / Дата (галочки) / и где
тики представляет миллисекунды с
эпоха (UTC). Итак, 29 ноября 1989 г.
4:55:30 утра, в UTC кодируется как
"\ / Дата (628318530718) \ /".
Решение было бы просто разобрать:
value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));
Однако я слышал, что где-то есть настройка, позволяющая сериализатору выводить DateTime
объекты с синтаксисом new Date(xxx)
. Я постараюсь выкопать это.
Второй параметр JSON.parse()
принимает функцию reviver
, которая предписывает, как значение, изначально созданное до его возвращения.
Вот пример для даты:
var parsed = JSON.parse(data, function(key, value) {
if (typeof value === 'string') {
var d = /\/Date\((\d*)\)\//.exec(value);
return (d) ? new Date(+d[1]) : value;
}
return value;
});
См. Документы JSON.parse ()