Как я могу преобразовать строку JSON в объект в JavaScript? Есть ли способ, который делает это?

Что-то типа:

var x = "{  id: 5, name: 'hello'  }";
var y = /*something*/(x);

alert(y.id + " " + y.name);
7
BrunoLM 10 Июн 2010 в 15:17

6 ответов

Лучший ответ

Что касается комментариев и истории вопросов, похоже, что вы уже используете 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': 1} («test» использует одинарные кавычки вместо двойных).

Кроме того, если вы ничего не передадите, пустая строка, null или undefined, из parseJSON будет возвращено 'null'. Если браузер предоставляет собственную реализацию JSON.parse, jQuery использует ее для анализа строки. Подробнее о формате JSON см. http://json.org/.

Пример:

Разберите строку JSON.

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
9
BalusC 10 Июн 2010 в 11:49

Этот параграф полностью покрывает собственные реализации JSON и библиотеки, которые используют собственные реализации JSON: http://en.wikipedia.org/wiki/JSON#Native_JSON

Использование нативной реализации JSON будет значительно быстрее / безопаснее, чем использование некоторых библиотек JavaScript для одной и той же задачи. Однако, если какая-то библиотека заявляет, что она попытается использовать нативную реализацию, когда это возможно, - это даже лучший выбор, если использовать нативный JSON напрямую (совместимость и прочее).

1
bezmax 10 Июн 2010 в 11:22

Вы также можете сделать следующее, что немного меньше зла, чем зла :):

var x = '{  "id": 5, "name": "hello"  }';

var y = new Function("return " + x)();
alert(y.id + " " + y.name);

Однако, как говорят другие, если вы используете jquery, воспользуйтесь встроенным методом parseJson.

0
Tim Cooper 29 Сен 2011 в 13:12

Сайт JSON.org предлагает самое простое решение:

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

Дополнительная информация

Редактировать: Ох. Правильно. Решение eval хорошо, если и только если вы уверены, что можете доверять источнику для создания правильных объектов JSON. В противном случае вам придется использовать анализатор JSON - посмотрите другие ответы.

0
Jean Hominal 10 Июн 2010 в 11:41

Используйте json2 lib: http://www.json.org/js.html

5
Aif 10 Июн 2010 в 11:18

Бруно ,

Вот метод jquery, который, как вы увидите, использует тот же новый бизнес 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)
}

[править] регулярное выражение, конечно, «имеет дело» с любыми мошенническими символами, встроенными в строку json.

Жуткий, хотя :)

2
jim tollan 11 Июн 2010 в 12:07