Как преобразовать строку JSON в объект?

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

Что-то как:

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

alert(y.id + " " + y.name);
7
задан BalusC 11 June 2010 в 12:09
поделиться

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

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

Пример:

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

 var obj = jQuery.parseJSON ('{"name": "John"}');
alert (obj.name === "Джон");
9
ответ дан 6 December 2019 в 11:46
поделиться

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

5
ответ дан 6 December 2019 в 11:46
поделиться

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

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

1
ответ дан 6 December 2019 в 11:46
поделиться

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

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

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

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

0
ответ дан 6 December 2019 в 11:46
поделиться

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

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

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

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

0
ответ дан 6 December 2019 в 11:46
поделиться

Бруно,

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

жутковато :)

2
ответ дан 6 December 2019 в 11:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: