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

Есть ли способ получить значение даты из JSON в API визуализации Google? Вот фрагмент для игровой площадки скопируйте в него приведенный ниже код.

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

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});
}

person cilerler    schedule 03.09.2010    source источник
comment
чувак у меня такая же проблема!   -  person Marcel Falliere    schedule 21.12.2010
comment
Я знаю, что это довольно старый вопрос, но у меня такая же проблема, и вы можете помочь. Это мой json [["Date(2015,6,1)",9,218.0],["Date(2015,7,1)",10,497.5],["Date(2015,8,1)",13,317.5],["Date(2015,9,1)",29,1572.0],["Date(2015,10,1)",34,480.0],["Date(2015,11,1)",20,387.0],["Date(2016,0,1)",34,836.0],["Date(2016,1,1)",29,957.5],["Date(2016,2,1)",2,1250.0],["Date(2016,3,1)",2,793.5],["Date(2016,10,1)",3,801.0],["Date(2016,11,1)",2,756.5],["Date(2017,1,1)",2,410.0]], и я получаю ошибку Uncaught: несоответствие типов. Дата валютирования (2015,6,1) не соответствует дате типа в индексе столбца 0.   -  person Carlo S    schedule 22.05.2017


Ответы (3)


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

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

person Jan Drewniak    schedule 29.02.2012

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

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

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

person Sohail    schedule 01.12.2014

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

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

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

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

person VGE    schedule 22.12.2010
comment
eval() является одним из решений. Прежде чем прочитать ваш ответ, VGE, я обнаружил, что нужно перебрать даты и создать новую дату (data.row[i].c[0].v) (дата — это первая серия). У меня, конечно, была дата, отформатированная в строке, поэтому новая Date() понимает ее. - person Marcel Falliere; 25.12.2010
comment
Извините, Марсель, я не видел ваш комментарий раньше. Ни EVAL, ни манипулирование всеми данными не являются элегантным решением. - person cilerler; 15.06.2011
comment
@VGE спасибо за цитату. Это была простая опечатка. Я обновил это по вопросу - person cilerler; 05.03.2012