Вопрос: Разбор JSON в JavaScript? [Дубликат]


На этот вопрос уже есть ответ:

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

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

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


1499


источник


Ответы:


Поддержка большинства браузеров 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);

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


1855



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

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


90



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

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

48



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


31



The following example will make it clear:

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

// Output: x, 11

OR

You can also use the eval function. The following example is using the eval function:

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

// Output: x, 11

Since the JSON.parse function is more secure and executes faster than the eval function, I recommend you to use JSON.parse function.


30



You can either use the eval function as in some other answers. (Don't forget the extra braces.) You will know why when you dig deeper), or simply use the jQuery function parseJSON:

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

OR

You can use this below code.

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

And you can access the fields using jsonObject.result and jsonObject.count.


24



If you pass a string variable (a well-formed JSON string) to JSON.parse from MVC @Viewbag that has doublequote, '"', as quotes, you need to process it before JSON.parse (jsonstring)

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

24



The easiest way using parse() method:

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

this is an example of how to get values:

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

23