Разбор JSON в JavaScript?


Answers

Прежде всего, вы должны убедиться, что код JSON действителен.

После этого я бы рекомендовал использовать библиотеку JavaScript, такую ​​как jQuery или Prototype, если это возможно, потому что эти вещи хорошо обрабатываются в этих библиотеках.

С другой стороны, если вы не хотите использовать библиотеку, и вы можете поручиться за действительность объекта JSON, я бы просто обернул строку анонимной функцией и использовал функцию eval.

Это не рекомендуется, если вы получаете объект JSON из другого источника, который не является абсолютно надежным, потому что функция eval позволяет использовать ренегатный код, если вы это сделаете.

Вот пример использования функции eval:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

Если вы контролируете, какой браузер используется, или вас не беспокоят люди со старым браузером, вы всегда можете использовать метод JSON.parse.

Это действительно идеальное решение для будущего.

Question

На этот вопрос уже есть ответ:

Я хочу проанализировать строку JSON в JavaScript. Ответ - это что-то вроде

var response = '{"result":true,"count":1}';

Как я могу получить result и count из этого?




Я думал, что JSON.parse(myObject) будет работать. Но в зависимости от браузеров, возможно, стоит использовать eval('('+myObject+')') . Единственная проблема, которую я могу порекомендовать, - это многоуровневый список в JSON.




JSON.parse () преобразует любую строку JSON, переданную в функцию, в объект JSON.

Для лучшего понимания нажмите F12, чтобы открыть элемент «Проверка» вашего браузера, и перейдите на консоль, чтобы написать следующие команды:

var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.

Теперь запустите команду:

console.log(JSON.parse(response));

Вы получите результат как Object {result: true, count: 1}.

Чтобы использовать этот объект, вы можете назначить его переменной, скажем, obj :

var obj = JSON.parse(response);

Теперь, используя obj и оператор dot (.), Вы можете получить доступ к свойствам объекта JSON.

Попробуйте запустить команду

console.log(obj.result);



Самый простой способ использования метода parse() :

var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);

это пример того, как получить значения:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;



Как упоминалось многими другими, большинство браузеров поддерживают JSON.parse и JSON.stringify .

Теперь я также хотел бы добавить, что если вы используете AngularJS (который я настоятельно рекомендую), он также предоставляет требуемые функции:

var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)

Я просто хотел добавить материал об AngularJS, чтобы предоставить другой вариант. Обратите внимание, что AngularJS официально не поддерживает Internet Explorer 8 (и более старые версии, если на то пошло), хотя благодаря опыту большая часть материала, похоже, работает очень хорошо.




Если вы хотите использовать JSON 3 для старых браузеров, вы можете загрузить его условно:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

Теперь стандартный объект window.JSON доступен вам независимо от того, в каком браузере работает клиент.




Вы можете использовать функцию eval, как в некоторых других ответах. (Не забудьте дополнительные скобки.) Вы узнаете, почему, когда вы копаете глубже) или просто используйте функцию jQuery parseJSON :

var response = '{"result":true , "count":1}'; 
var parsedJSON = $.parseJSON(response);

ИЛИ

Вы можете использовать этот ниже код.

var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);

И вы можете получить доступ к полям, используя jsonObject.result и jsonObject.count .




Если вы используете jQuery, это просто:

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1





Links