Разобрать JSON в JavaScript?

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

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

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

16 ответов

Решение

Большинство браузеров поддерживают JSON.parse(), что определено в ECMA-262 5-е издание (спецификация, на которой основан JavaScript). Его использование просто:

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

alert(obj.count);

/* or ES6 */

const json = '{"result":true,"count":1}' || {};
const { result, count } = JSON.parse(json);
alert(result);
alert(count);

Для браузеров, которые этого не делают, вы можете реализовать это с помощью json2.js.

Как отмечено в комментариях, если вы уже используете jQuery, есть $.parseJSON функция, которая отображается на JSON.parse если доступно или форма eval в старых браузерах. Однако при этом выполняются дополнительные ненужные проверки, которые также выполняются JSON.parse так что для лучшего всестороннего выступления я бы порекомендовал использовать его так:

var json = '{"result":true,"count":1}',
    obj = JSON && JSON.parse(json) || $.parseJSON(json);

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

Прежде всего, вы должны убедиться, что код 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.

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

Если вы получаете это с внешнего сайта, может быть полезно использовать getQSON jQuery. Если это список, вы можете перебирать его с помощью $.each.

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

Если вы хотите использовать 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 объект доступен вам независимо от того, какой браузер запущен клиентом.

Следующий пример прояснит это:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

ИЛИ ЖЕ

Вы также можете использовать eval функция. В следующем примере используется eval функция:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = eval('(' + jsontext + ')');
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

Так как JSON.parse функция более безопасна и выполняется быстрее, чем функция eval, я рекомендую вам использовать JSON.parse функция.

Если вы передаете строковую переменную (правильно сформированную строку JSON) в JSON.parse из MVC @Viewbag с двойной кавычкой '' ', как кавычки, вам нужно обработать ее перед JSON.parse (jsonstring)

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  

Вы можете использовать функцию 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,

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

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

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

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

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 и оператор точка (.) вы можете получить доступ к свойствам объекта JSON.

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

console.log(obj.result);

Без использования библиотеки вы можете использовать eval - единственный раз, когда вы должны использовать. Хотя безопаснее использовать библиотеку.

например...

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

var parsedJSON = eval('('+response+')');

var result=parsedJSON.result;
var count=parsedJSON.count;

alert('result:'+result+' count:'+count);

Если хочешь

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

Вы можете получить доступ к элементам JSON с помощью JsonObject с точкой (.):

JsonObject.result;
JsonObject.count;

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

Простой способ сделать это:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)

Как уже упоминалось многими другими, большинство браузеров поддерживают 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 (и более старые версии, если на то пошло), хотя, как показывает опыт, большинство вещей работает довольно хорошо.

Если вы используете Dojo Toolkit:

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});

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

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
Другие вопросы по тегам