Ассоциативный массив не работает с eval () JavaScript - PullRequest
2 голосов
/ 18 июля 2011

Я генерирую данные, выраженные в виде словаря Python, которые выводятся с использованием simplejson через url в этом формате.

{"2": "London", "3": "Tokyo", "4": "Sydney"}

Я использую $.get и сохраняю в переменные данные. Однако eval(data) не генерирует ассоциативный массив. На самом деле выкидывает ошибку. В чем проблема? Какое решение?

Редактировать: я поделился кодом http://dpaste.com/570901/

Ответы [ 5 ]

6 голосов
/ 18 июля 2011

Ваша ошибка в том, что { в начале оператора читается как блок кода (как тип, который вы используете в if s и for s), а не как литерал объекта.Вы можете поставить круглые скобки, чтобы eval сделал то, что вы хотите:

eval('(' + str + ')');

Конечно, eval - это зло, и вы должны использовать что-то вроде JSON.parse.У большинства новых браузеров это есть, и это не только безопаснее, но и быстрее.

4 голосов
/ 18 июля 2011

Нам нужно увидеть больше кода ...

var x = '{"2": "London", "3": "Tokyo", "4": "Sydney"}';

eval('var y = ' + x);
      // or
var y = eval('(' + x + ')');

console.log(y);
console.log(y["2"]);

Все вышеперечисленное прекрасно работает.Что именно вы делаете / не делаете?

PS: Вы не должны использовать eval для этого независимо, но важно знать, как это работает.

2 голосов
/ 18 июля 2011

Помните, что вы оцениваете код JavaScript, а не JSON. Судя по всему, ваша строка будет преобразована в блок, но первая часть синтаксически неверна. ("2": близко к помеченному выражению, но без сигары.) Вам необходимо заключить строку в скобки, чтобы рассматривать ее как литерал объекта.

2 голосов
/ 18 июля 2011

eval медленный, неэффективный и трудный для отладки. Не используйте его.

Пусть ваш скрипт выведет заголовок типа контента application/json, и jQuery автоматически преобразует JSON в объект JS.

1 голос
/ 18 июля 2011

с помощью функции jquery $. Get () вы можете сказать, что она должна ожидать возврата строки json (установите для dataType значение "json"), и она позаботится о создании объекта вы, eval () не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...