Как преобразовать строку JSON в объект в JavaScript? Есть ли способ, который это делает?Как преобразовать строку JSON в объект?
Что-то вроде:
var x = "{ id: 5, name: 'hello' }";
var y = /*something*/(x);
alert(y.id + " " + y.name);
Как преобразовать строку JSON в объект в JavaScript? Есть ли способ, который это делает?Как преобразовать строку JSON в объект?
Что-то вроде:
var x = "{ id: 5, name: 'hello' }";
var y = /*something*/(x);
alert(y.id + " " + y.name);
Согласно комментариям и истории вопроса, похоже, что вы уже используете jQuery. В этом случае хорошо знать, что jQuery поставляется с новой функцией parseJSON()
с version 1.4.1, которая была выпущена в конце января этого года. Рассмотрите возможность обновления, если вы еще не 1.4.1. Вот выдержка отношения с его API документации:
Описание: Принимает хорошо сформированную строку JSON и возвращает полученный объект JavaScript.
jQuery.parseJSON (JSON) версии добавлены: 1.4.1
JSON Строка JSON для синтаксического анализа.
Передача неправильной строки JSON приведет к исключению исключения. Например, следующие все деформированные JSON строки:
{test: 1}
(тест не имеет двойные кавычки вокруг него).{'test': 1}
('test' использует одинарные кавычки вместо двойных кавычек).Кроме того, если вы ничего не передадите, пустая строка, null или undefined, будет возвращена «null» от
parseJSON
. Если браузер обеспечивает встроенную реализациюJSON.parse
, jQuery использует его для синтаксического анализа строки. Подробнее о формате JSON см. http://json.org/.Пример:
Синтаксический строку JSON.
var obj = jQuery.parseJSON('{"name":"John"}'); alert(obj.name === "John");
BalusC: Я не удаляю тег 'jquery', но для справок в будущем теги предназначены для * вопроса *, а не для ответов. Вопрос не сужает выбор jQuery, даже если он открыт для jQuery. Из 6 ответов ваш был единственным связанным с jQuery. В принципе, это не вопрос jQuery и не должен быть помечен как таковой. – Blixt
Используйте json2 Lib: http://www.json.org/js.html
Сайт JSON.org дает простое решение:
var y = eval('(' + x + ')');
Edit: О. Правильно. Решение eval
является хорошим, если и только если вы уверены, что можете доверять источнику для создания правильных объектов JSON. В противном случае вам придется использовать парсер JSON - посмотрите на другие ответы.
Этот пункт полностью покрывает собственные реализации JSON, и библиотеки, которые используют собственные реализации JSON: http://en.wikipedia.org/wiki/JSON#Native_JSON
Использование родной реализации JSON будет значительно быстрее будет/безопаснее, чем при использовании некоторых JavaScript библиотеки для той же задачи. Однако, если какая-то библиотека утверждает, что она будет пытаться использовать встроенную реализацию, когда это возможно - это даже лучший выбор, который использует родной JSON напрямую (совместимость и прочее).
вы также можете сделать следующее, которое slighly меньше зла, чем Eval :):
var x = '{ "id": 5, "name": "hello" }';
var y = new Function("return " + x)();
alert(y.id + " " + y.name);
Тхо, как сказано другими, если вы используете JQuery, идти на встроенный parseJson метод.
Хороший, но я думаю, что это так же опасно, как 'eval' – BrunoLM
Bruno - механики под крышками разные, и если вы посмотрите на код jquery, вы можете просто увидеть что-то похожее на это в этой функции (parseJSON: function (а)). см. выдержку ниже для функции jquery из источника .. –
Бруно,
вот метод JQuery, который, как вы увидите, использует собственную же новую функцию ("вернуться ..) бизнес.
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)
}
[править] регулярного выражения это, конечно, «дело» с любыми изгоями символов, встроенных в þér JSon строки.
привидение Тхо :)
, но он использует JSON.parse, где доступно, что, безусловно, является хорошей вещью (tm). Без объекта JSON вряд ли лучший способ сделать преобразование, поскольку создание полного JSON-парсера в JavaScript, несомненно, приведет к чему-то более медленному, чем eval. –
ammoQ - да, абсолютно. просто рад, что они не использовали метод eval как резервный ум :) –
Это безопасно, потому что регулярное выражение +1 для указания его – BrunoLM
без или без обрамления (JQuery и т.д.)? – kennytm
(И, пожалуйста, не 'eval'.) – kennytm
jQuery делает это? Как? – BrunoLM