Как преобразовать строку JSON в объект? - PullRequest
7 голосов
/ 10 июня 2010

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

Что-то вроде:

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

alert(y.id + " " + y.name);

Ответы [ 6 ]

9 голосов
/ 10 июня 2010

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

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

Пример:

Анализ строки JSON.

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
5 голосов
/ 10 июня 2010

Использовать json2 lib: http://www.json.org/js.html

2 голосов
/ 11 июня 2010

Бруно,

вот метод 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.

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

1 голос
/ 10 июня 2010

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

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

0 голосов
/ 11 июня 2010

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

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

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

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

0 голосов
/ 10 июня 2010

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

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

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

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

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