it-swarm.com.ru

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

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

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

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

1610
user605334

Большинство браузеров поддерживают JSON.parse() , что определено в 5-ом издании ECMA-262 (спецификация, на которой основан 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 выполнял проверку работоспособности строки перед передачей ее в собственную функцию синтаксического анализа.

1928
Andy E

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

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

101
Clarence Fredericks

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

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

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

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

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

35
huwiler

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

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

// Output: x, 11

OR

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

34
Joke_Sense10

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

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

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

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

OR

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

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

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

28
Teja

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

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

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

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

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

например...

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

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

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

alert('result:'+result+' count:'+count);
21
El Ronnoco

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);
21
Pushkar Kathuria

Если хочешь

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

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

JsonObject.result;
JsonObject.count;
19
user5676965418

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

13
ha9u63ar

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

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

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

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

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

7
user2359695

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

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