Разбор JSON в JavaScript?

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

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

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

Ответы

Ответ 1

Стандартный способ разбора JSON в JavaScript - это JSON.parse()

JSON API был представлен в ES5 (2011) и с тех пор был реализован в> 99% браузеров по доле рынка, а также Node.js. Его использование простое:

const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);

Единственный раз, когда вы не сможете использовать JSON.parse(), это если вы программируете для древнего браузера, такого как IE 7 (2006), IE 6 (2001), Firefox 3 (2008), Safari 3.x(2009) ) и т.д. Кроме того, вы можете находиться в эзотерической среде JavaScript, которая не включает в себя стандартные API. В этих случаях используйте json2.js, эталонную реализацию JSON, написанную Дугласом Крокфордом, изобретателем JSON. Эта библиотека обеспечит реализацию JSON.parse().

При обработке очень больших файлов JSON JSON.parse() может подавиться из-за его синхронного характера и дизайна. Для решения этой проблемы веб-сайт JSON рекомендует использовать сторонние библиотеки, такие как Oboe.js и clarinet, которые обеспечивают потоковый анализ JSON.

В jQuery когда-то была функция $.parseJSON(), но она устарела в jQuery 3.0. В любом случае, долгое время это была не более чем обертка вокруг JSON.parse().

Ответ 2

WARNING!

Этот ответ проистекает из древней эры программирования на JavaScript, во время которой не было встроенного способа анализа JSON. Приведенный здесь совет более не применим и, вероятно, опасен. С современной точки зрения анализ JSON с использованием jQuery или вызовом eval() - это нонсенс. Если вам не требуется поддержка IE 7 или Firefox 3.0, правильный способ анализа JSON - это JSON.parse().

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);

// Output: John Doe, 11

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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

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

Ответ 9

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);

Ответ 10

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

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

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

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

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

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

Ответ 11

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

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

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

JsonObject.result;
JsonObject.count;

Ответ 12

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

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