JSON представляют в виде строки к объекту JS

Я использую объект JS создать графики с визуализацией Google. Я пытаюсь разработать источник данных. Сначала, я создал клиентский объект JS.

var JSONObject = {
    cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
        {id: 'soldpens', label: 'Sold Pens', type: 'number'}],
    rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
        {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
     {c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}]  
};

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

Теперь я должен выбрать данные динамично. Таким образом, я отправляю запрос Ajax к странице, которая возвращает строку JSON:

 "cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
{id: 'soldpens', label: 'Sold Pens', type: 'number'}],
  rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
      {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}"

Это я сохраняю в переменную:

var var1 = "cols: [{i ....... 66}]}"

и покажите как

alert(var1);

Теперь моя задача состоит в том, чтобы создать объект JS из этой строки. Это не работает. Когда я использую объект JS, все хорошо работает, и я могу получить свой необходимый график. Теперь, если я пытаюсь поместить то же значение строки от запроса Ajax, который я подтвердил из аварийного сообщения в объект n, объект не становится созданным правильно. Сообщите мне свое мнение и любое исправление или советы.

70
задан outis 26 December 2011 в 10:14
поделиться

5 ответов

Некоторые современные браузеры поддерживают синтаксический анализ JSON в собственный объект:

var var1 = '{"cols": [{"i" ....... 66}]}';
var result = JSON.parse(var1);

Для браузеров, которые его не поддерживают, вы можете загрузить json2.js с json.org для безопасного анализа файла Объект JSON. Сценарий проверит наличие встроенной поддержки JSON и, если она не существует, вместо этого предоставит глобальный объект JSON. Если доступен более быстрый собственный объект, он просто выйдет из скрипта, оставив его нетронутым. Однако вы должны предоставить действительный JSON, иначе возникнет ошибка - вы можете проверить действительность своего JSON с помощью http://jslint.com или http://jsonlint.com .

133
ответ дан 24 November 2019 в 13:22
поделиться

строка в вашем вопросе не является правильной строкой json. С сайта json.org:

JSON построен на двух структурах:

* Коллекция пар имя/значение. В различных языках это 
 реализуется как объект, запись, структура, словарь, хэш-таблица, список с ключами или
 ассоциативный массив.
* Упорядоченный список значений. В большинстве языков это реализуется как
 массив, вектор, список или последовательность.

В основном строка json всегда начинается с { или [.

Затем, как сказали @Andy E и @Cryo, вы можете разобрать строку с помощью json2.js или других библиотек.

IMHO вы должны избегать eval, потому что он будет работать с любой программой javascript, поэтому вы можете столкнуться с проблемами безопасности.

5
ответ дан 24 November 2019 в 13:22
поделиться

Строка, которую вы возвращаете, не является корректным JSON. Имена в объектах должны быть заключены в кавычки, а вся строка должна быть заключена в { ... }, чтобы сформировать объект. JSON также не может содержать что-то вроде new Date(). JSON - это лишь небольшое подмножество JavaScript, в котором есть только строки, числа, объекты, массивы, true, false и null.

Дополнительную информацию см. в грамматике JSON.

3
ответ дан 24 November 2019 в 13:22
поделиться

Вы можете использовать эту библиотеку с JSON.org для преобразования вашей строки в объект JSON.

var var1_obj = JSON.parse(var1);

Или вы также можете использовать библиотеку jquery-json .

var var1_obj = $.toJSON(var1);
4
ответ дан 24 November 2019 в 13:22
поделиться

Вы можете использовать eval (jsonString), если доверяете данным в строке, в противном случае вам нужно будет правильно проанализировать их - проверьте json.org для некоторых примеров кода.

5
ответ дан 24 November 2019 в 13:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: