Как вернуть значение даты из JSON в API визуализации Google

Есть ли способ получить значение даты из JSON в API визуализации Google? Вот snipplet для playground, скопируйте приведенный ниже код

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

function drawVisualization() {
var JSONObject = {
cols:
    [
        {id: 'header1', label: 'Header1', type: 'string'},
        {id: 'header2', label: 'Header2', type: 'date'}
    ],
rows: 
    [
        {
            c:
                [
                    {v: 'Value1'}, 
                    {v: "new Date(2010, 3, 28)"}  // <= This is the format I receive from WebService
                ]
        },
        {
            c:
                [
                    {v: 'Value2'},
                    {v: new Date(2010, 3, 28)} // <=This is the format Google API accepts
                ]
        }
    ]
};

var data = new google.visualization.DataTable(JSONObject, 0.5);

visualization = new google.visualization.Table(document.getElementById('table'));
visualization.draw(data, {'allowHtml': true});
}

Ответ 1

Я сам столкнулся с этой проблемой, поэтому я решил вставить ответ из документации google api, расположенной здесь http://code.google.com/apis/chart/interactive/docs/dev/implementing_data_source.html#jsondatatable

"JSON не поддерживает значения даты JavaScript (например," новая дата (2008,1,28,0,31,26) ", реализация API делает. Однако API теперь поддерживает настраиваемое допустимое представление JSON дат в виде строки в следующем формате: Дата (год, месяц, день [, час, минута, секунда [, миллисекунда]]), где все послезавтра является необязательным, а месяцы основаны на нуле."

Ответ 2

Я столкнулся с одной проблемой, и выше решение не сработало. После поиска в течение нескольких часов я нашел следующее сообщение и решение там работало.

https://groups.google.com/forum/#!msg/google-visualization-api/SCDuNjuo7xo/ofAOTVbZg7YJ

Не включайте "новый" в строку json, так что это будет просто:   v: "Дата (2009, 9, 28)"

Ответ 3

Я полагаю, что цитата не в правильном месте в вашем фрагменте "new Date(2010, 3, 28") Вместо этого напишите "new Date(2010, 3, 28)"

Формат Json не принимает объект javascript, поэтому сервер возвращает строку. JSON знает только числа, булевы константы, строку, нуль, вектор и "объект" (гораздо больше словаря).

Я предполагаю, что вам нужно выполнить eval() возвращенной строки (не забудьте проверить входы).

Другой альтернативой является использование Regex для извлечения полей, которые будут работать как-то вроде /new Date\((\d+),(\d+),(\d+)\)/.