Большинство современных браузеров поддерживают собственный метод JSON.parse
, который делает именно это.Если вы нацеливаетесь на браузер, который этого не делает, вы можете использовать реализацию Дугласа Крокфорда, предоставленную здесь (прокрутите вниз).
В любом случае, не используйте eval
, если можетевообще избегать этого.
Обновление (относительно eval
):
As JSON.org состояния:
JSON - это подмножество объектной литеральной нотации JavaScript.Поскольку JSON является подмножеством JavaScript, его можно использовать на языке без суеты и суеты.
Что это означает на практике?Ну, это означает, что любой допустимый объект JSON также является допустимым кодом JS (в техническом плане: это допустимое выражение JS, которое оценивается как литерал объекта).Следовательно, вы можете вставить JSON в файл и указать, например, вашему браузеру загрузить его как JavaScript, и он сделает это без каких-либо ошибок или предупреждений (конечно, «JavaScript» на самом деле не будет делать ничего, потому что этотолько представление объекта, а не процедурный код).
Поскольку мы установили, что JSON можно интерпретировать как JavaScript, его также можно передать в eval
.Давайте посмотрим, что MDC может сказать о eval
:
Аргументом функции eval является строка.Если строка представляет выражение, eval оценивает выражение.
...
Анализ JSON (преобразование строк в объекты JavaScript)
ЕслиСтрока, к которой вы вызываете eval()
, содержит данные (например, массив: "[1, 2, 3]"
), в отличие от кода, вам следует подумать о переключении на JSON, что позволяет строке использовать поднабор синтаксиса JavaScript для представления данных.
Приведенное выше, возможно, не лучшее объяснение, но оно говорит о том, что происходит: JSON можно рассматривать как выражение JS.eval
принимает строку, представляющую выражение JS (в данном случае строку, содержащую JSON), оценивает ее и возвращает результат.Это как мини-компилятор, к которому вы можете передать код во время выполнения, и он запустит код для вас и вернет результат.В этом случае результатом будет объект JS (как уже упоминалось, JSON является допустимым выражением JS, представляющим объект).
Так что если у вас есть
var json = '{"foo": "bar", "answer": 42}';
var object1 = eval(json);
var object2 = { foo: "bar", answer: 42 };
Тогда object1
и object2
будут двумя разными, но идентичными объектами.