Разбирать JSON в JavaScript? [дубликат]

этот вопрос уже есть ответ здесь:

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

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

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

16 ответов


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

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

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


прежде всего, вы должны убедиться, что код JSON действителен.

после этого, я бы рекомендовал использовать библиотеку JavaScript, такие как jQuery или Prototype, если вы можете, потому что эти вещи обрабатываются в этих библиотеках.

С другой стороны, если вы не хотите использовать библиотеку, и вы можете ручаться за достоверность объекта JSON, я бы просто обернул строку в анонимную функцию и использовал функцию eval.

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

вот пример использования функции eval:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

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

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


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

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


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

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

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

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

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

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

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

например...

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

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

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

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

в формате JSON.parse () преобразует любую строку JSON, переданную в функцию, в объект JSON.

для лучшего понимания, пресс F12 чтобы открыть элемент Inspect Вашего браузера, перейдите в консоль и напишите следующие команды:

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

вы получите вывод как объект {result: true, count: 1}.

чтобы использовать этот объект, вы можете назначить его переменной, скажем obj:

var obj = JSON.parse(response);

С помощью obj и точка(.) оператора, вы можете получить доступ к свойствам объекта JSON.

попробуйте выполнить команду

console.log(obj.result);

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

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

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

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

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

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

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