Разбор JSON в JavaScript?

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

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

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

1518
задан user605334 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
ответ дан Andy E 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
ответ дан Clarence Fredericks 08 февр. '11 в 19:46
источник поделиться

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

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});
49
ответ дан milestyle 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
ответ дан huwiler 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
ответ дан Joke_Sense10 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
ответ дан Teja 06 июня '13 в 6:51
источник поделиться

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

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  
25
ответ дан Jenna Leaf 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
ответ дан Jorgesys 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
ответ дан El Ronnoco 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
ответ дан Pushkar Kathuria 18 февр. '15 в 13:08
источник поделиться

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

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

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

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

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

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

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

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
9
ответ дан yassine 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
ответ дан user2359695 01 июля '14 в 20:51
источник поделиться

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

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

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

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

Другие вопросы по меткам