Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

var var1_obj = JSON.parse(var1);

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

var var1_obj = $.toJSON(var1);

Ответ 5

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

Подробнее см. JSON grammar.