Разбор JSON в JavaScript?

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

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

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

1518
задан 08 февр. '11 в 19:34
источник поделиться
16 ответов

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

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

alert(obj.count);

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

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

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

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

1868
ответ дан 08 февр. '11 в 19:38
источник

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

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

91
ответ дан 08 февр. '11 в 19:46
источник

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

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});
49
ответ дан 19 июля '12 в 0:57
источник

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

32
ответ дан 19 апр. '13 в 21:52
источник

В следующем примере будет ясно:

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.

31
ответ дан 01 окт. '13 в 10:42
источник

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

25
ответ дан 06 июня '13 в 6:51
источник

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

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  
25
ответ дан 22 окт. '14 в 18:06
источник

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

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

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

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
23
ответ дан 04 июня '15 в 17:44
источник

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

например,...

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

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

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

alert('result:'+result+' count:'+count);
19
ответ дан 08 февр. '11 в 19:45
источник

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);
19
ответ дан 18 февр. '15 в 13:08
источник

Если вам нравится

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

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

JsonObject.result;
JsonObject.count;
17
ответ дан 15 мая '15 в 8:42
источник

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

11
ответ дан 04 апр. '13 в 13:38
источник

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

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
9
ответ дан 24 сент. '14 в 21:08
источник

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

4
ответ дан 01 июля '14 в 20:51
источник

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

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});
4
ответ дан 17 июля '14 в 23:09
источник

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

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
4
ответ дан 12 марта '14 в 12:33
источник

Другие вопросы по меткам или Задайте вопрос