Как я могу преобразовать строку JSON в объект в JavaScript? Существует ли метод, который делает это?
Что-то как:
var x = "{ id: 5, name: 'hello' }";
var y = /*something*/(x);
alert(y.id + " " + y.name);
Судя по комментариям и истории вопросов, похоже, что вы уже используете jQuery. В этом случае полезно знать, что jQuery поставляется с новой функцией parseJSON ()
, начиная с версии 1.4.1 , которая была выпущена в конце января этого года. Рассмотрите возможность обновления, если у вас еще нет версии 1.4.1. Вот выдержка из документации по API:
Описание : принимает правильно сформированную строку JSON и возвращает полученный объект JavaScript.
jQuery.parseJSON (json) добавлена версия: 1.4.1
json Строка JSON для синтаксического анализа.
Передача неверно сформированной строки JSON приведет к возникновению исключения. Например, все следующие строки являются искаженными JSON:
{test: 1}
(test не заключен в двойные кавычки).{'test': 1}
('test' использует одинарные кавычки вместо двойных кавычек).Кроме того, если вы не передадите ничего, пустую строку, null или undefined, из
parseJSON
будет возвращено 'null'. Если браузер предоставляет встроенную реализациюJSON.parse
, jQuery использует его для анализа строки. Подробнее о формате JSON см. http://json.org/ .Пример:
Разобрать строку JSON.
var obj = jQuery.parseJSON ('{"name": "John"}'); alert (obj.name === "Джон");
В этом параграфе полностью описаны встроенные реализации JSON и библиотеки, которые использовать собственные реализации JSON: http://en.wikipedia.org/wiki/JSON#Native_JSON
Использование собственной реализации JSON будет значительно быстрее / безопаснее, чем использование некоторых библиотек javascript для той же задачи. Однако, если какая-то библиотека утверждает, что она будет пытаться использовать нативную реализацию, когда это возможно - это даже лучший выбор, если использовать собственный JSON напрямую (совместимость и прочее).
Сайт JSON.org дает самое простое решение:
var y = eval('(' + x + ')');
Редактировать: О. Верно. Решение eval
хорошо тогда и только тогда, когда вы уверены, что можете доверять источнику в создании корректных объектов JSON. В противном случае вам придется использовать парсер JSON - посмотрите на другие ответы.
вы также можете сделать следующее, что немного меньше зла, чем eval :):
var x = '{ "id": 5, "name": "hello" }';
var y = new Function("return " + x)();
alert(y.id + " " + y.name);
но, как говорят другие, если вы используете jquery, используйте встроенный метод parseJson.
Бруно,
вот метод jquery, который, как вы увидите, использует тот же самый new Function("return...") бизнес.
parseJSON: function (a) {
if (typeof a !== "string" || !a) return null;
if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, "")))
return z.JSON && z.JSON.parse ? z.JSON.parse(a) : (new Function("return " + a))();
else c.error("Invalid JSON: " + a)
}
[edit] regex, конечно, "работает" с любыми нестандартными символами, встроенными в строку json.
жутковато :)