Строка 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-объект, объект не будет создан правильно. Пожалуйста, дайте мне знать ваше мнение и любые исправления или советы.

67 голосов | спросил Vinod 13 FebruaryEurope/MoscowbSat, 13 Feb 2010 12:50:23 +0300000000pmSat, 13 Feb 2010 12:50:23 +030010 2010, 12:50:23

5 ответов


0

Некоторые современные браузеры поддерживают синтаксический анализ 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 .

ответил Andy E 13 FebruaryEurope/MoscowbSat, 13 Feb 2010 12:58:33 +0300000000pmSat, 13 Feb 2010 12:58:33 +030010 2010, 12:58:33
0

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

ответил whackamole 13 FebruaryEurope/MoscowbSat, 13 Feb 2010 12:55:50 +0300000000pmSat, 13 Feb 2010 12:55:50 +030010 2010, 12:55:50
0

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

  

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

* A collection of name/value pairs. In various languages, this is 
  realized as an object, record, struct, dictionary, hash table, keyed list, or
  associative array.
* An ordered list of values. In most languages, this is realized as an
  array, vector, list, or sequence.

Обычно строка json всегда начинается с {или [.

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

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

ответил filippo 13 FebruaryEurope/MoscowbSat, 13 Feb 2010 13:19:12 +0300000000pmSat, 13 Feb 2010 13:19:12 +030010 2010, 13:19:12
0

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

var var1_obj = JSON.parse(var1);

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

var var1_obj = $.toJSON(var1);
ответил nortron 13 FebruaryEurope/MoscowbSat, 13 Feb 2010 12:56:09 +0300000000pmSat, 13 Feb 2010 12:56:09 +030010 2010, 12:56:09
0

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

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

ответил Gumbo 13 FebruaryEurope/MoscowbSat, 13 Feb 2010 13:19:21 +0300000000pmSat, 13 Feb 2010 13:19:21 +030010 2010, 13:19:21

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132