Генерация массива Google Chart JSON - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть метод C #, который генерирует строку JSON, которая требуется Google-диаграммам.Вывод такого будет выглядеть примерно так:

[ [{ v: 'Mike', f: 'Mike' }, '', 'The President'], [{ v: 'Jim', f: 'Jim Vice President' }, 'Mike', 'VP'], ['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''] ]

Я пытаюсь получить эти данные из моего Javascript, используя getJSON и метод, который возвращает JsonResult.Однако Javascript (правильно) не будет анализировать его как массив, потому что я использую строку.

Как мне решить эту проблему?Я полагаю, что я должен генерировать свой C # JsonResult из массива, видя, как это то, что данные.Тем не менее, формат Google не совсем подходит для этого ...

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 02 февраля 2012

Если текст не может быть сделан допустимым JSON, вам может понадобиться использовать eval ...

var arr = eval(response_string);

или сделать его eval'd используя конструктор Function ...

var arr = Function('return ' + response_string)();

... но в обоих случаях убедитесь, что вы доверяете отправляемым данным.


Оба эти метода оценят строку как код JavaScript, поэтому независимо от того, отправленобудет работать до тех пор, пока синтаксис JavaScript действителен.

1 голос
/ 02 февраля 2012

Из документации :

Важное замечание: Начиная с jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно завершается молча. По этой причине избегайте частого ручного редактирования данных JSON. JSON - это формат обмена данными с синтаксическими правилами, которые более строгие, чем таковые в буквальной нотации объектов JavaScript

Как указывает комментатор, ваш JSON недействителен. Это:

 [ [{ v: 'Mike', f: 'Mike' }, ....  

должно быть:

 [ [{ "v": "Mike", "f": "Mike" }, ....  

Также убедитесь, что ваш JSON случайно не окружен " символами. Вы можете проверить правильность строки JSON здесь .

Как только вы это сделаете, data, переданный вашему обратному вызову, должен быть массивом, который вы ищете:

$.getJSON('url.json', function(data) {
    // data is the array you're looking for
});

Если ваша проблема заключается в том, что вам нужно преобразовать полученный объект в строку для API-интерфейсов Charts, взгляните на JSON.stringify(). Если вам нужна поддержка браузеров, которые ее не реализуют, вы можете найти реализацию, связанную здесь .

0 голосов
/ 02 февраля 2012

Скажите, что "s" - возвращаемая строка, x будет содержать объект JavaScript:

var s = "[ [{ v: 'Mike', f: 'Mike' }, '', 'The President'], [{ v: 'Jim', f: 'Jim Vice President' }, 'Mike', 'VP'], ['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''] ]"
var x = eval("y=" + s)
0 голосов
/ 02 февраля 2012

getJSON проанализирует "строковый" результат, возвращаемый вашим методом. Если, однако, вы возвращаете JsonResult со строкой в ​​качестве аргумента, вы просто кодируете эту строку, которая затем анализируется как строка на клиенте.

Если вы хотите вернуть массив объектов, то установите массив объектов в качестве параметра Data, и он будет автоматически сериализован в JSON.

...