Parse JSON w JavaScript? [duplikat]

To pytanie ma już odpowiedź tutaj:

Chcę przetworzyć łańcuch JSON w JavaScript. Odpowiedź jest czymś w rodzaju

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

Jak mogę uzyskać wartości result i count z tego?

Author: Taryn, 2011-02-08

16 answers

Większość przeglądarek obsługuje JSON.parse(), który jest zdefiniowany w ECMA-262 5th Edition (Specyfikacja, że JavaScript jest oparty na). Jego użycie jest proste:

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

Dla przeglądarek, które tego nie robią, możesz zaimplementować go za pomocą json2.js .

Jak wspomniano w komentarzach, jeśli używasz już jQuery, istnieje funkcja $.parseJSON, która mapuje do JSON.parse, jeśli jest dostępna, lub forma eval w starszych przeglądarkach. Wykonuje to jednak dodatkowe, niepotrzebne kontrole, które są również wykonywane by JSON.parse, więc dla najlepszego wszechstronnego działania polecam używać go w ten sposób:

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

Zapewni to natychmiastowe użycie natywnego JSON.parse, zamiast wykonywania przez jQuery kontroli zdrowości łańcucha znaków przed przekazaniem go do natywnej funkcji parsowania.

 1875
Author: Andy E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 10:13:09

Po pierwsze, musisz upewnić się, że kod JSON jest poprawny.

Po tym, polecam korzystanie z biblioteki JavaScript, takiej jak jQuery lub Prototype, jeśli możesz, ponieważ te rzeczy są dobrze obsługiwane w tych bibliotekach.

Z drugiej strony, jeśli nie chcesz używać biblioteki i możesz ręczyć za ważność obiektu JSON, po prostu zawiń łańcuch w funkcję anonimową i użyj funkcji eval.

Nie jest to zalecane, jeśli pacjent otrzymuje obiekt JSON z innego źródła, które nie jest całkowicie zaufane, ponieważ funkcja eval pozwala na renegade kodu, jeśli chcesz.

Oto przykład użycia funkcji eval:

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

Jeśli kontrolujesz, która przeglądarka jest używana lub nie martwisz się, że ludzie ze starszą przeglądarką, zawsze możesz użyć JSON.metoda parse.

To naprawdę idealne rozwiązanie na przyszłość.
 90
Author: Clarence Fredericks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-28 11:17:39

Jeśli otrzymujesz to z zewnętrznej strony, pomocne może być użycie getJSON jQuery. Jeśli jest to lista, możesz ją przejrzeć za pomocą $.każdy

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});
 49
Author: milestyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 21:30:42

Jeśli chcesz użyć JSON 3 dla starszych przeglądarek, możesz go załadować warunkowo za pomocą:

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

Teraz standardowy obiekt window.JSON jest dostępny dla ciebie bez względu na to, jaką przeglądarkę uruchamia klient.

 32
Author: huwiler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 21:30:57

Poniższy przykład jasno to wyjaśni:

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

// Output: x, 11

Lub

Można również użyć funkcji eval. Poniższy przykład wykorzystuje funkcję eval:

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

// Output: x, 11

Ponieważ funkcja JSON.parse jest bezpieczniejsza i wykonuje się szybciej niż funkcja eval, zalecam użycie funkcji JSON.parse.

 31
Author: Joke_Sense10,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-06 14:00:53

Możesz użyć funkcji eval, tak jak w innych odpowiedziach. (Nie zapomnij o dodatkowych aparatach ortodontycznych.) Dowiesz się dlaczego, gdy kopiesz głębiej), lub po prostu użyj funkcji jQuery parseJSON:

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

Lub

Możesz użyć poniższego kodu.

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

I możesz uzyskać dostęp do pól za pomocą jsonObject.result i jsonObject.count.

 25
Author: Teja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-06 13:59:43

Jeśli przekazujesz zmienną łańcuchową (dobrze uformowany łańcuch JSON) do 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, '"');  
 25
Author: Jenna Leaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:12:57

Najprostszy sposób użycia metody parse():

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

To jest przykład jak uzyskać wartości:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
 23
Author: Jorgesys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-20 00:58:42

Bez korzystania z biblioteki możesz użyć eval - jedyny czas, którego powinieneś użyć. Bezpieczniej jest jednak korzystać z biblioteki.

Np...

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

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

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

alert('result:'+result+' count:'+count);
 19
Author: El Ronnoco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 16:45:37

JSON.parse() konwertuje dowolny Łańcuch JSON przekazany do funkcji, do obiektu JSON.

Aby lepiej zrozumieć, naciśnij F12 , aby otworzyć element Inspect w przeglądarce i przejdź do konsoli, aby napisać następujące polecenia:

var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.

Teraz uruchom polecenie:

console.log(JSON.parse(response));

Zostanie wyświetlony jako obiekt {result: true, count: 1}.

Aby użyć tego obiektu, możesz przypisać go do zmiennej, powiedzmy obj:

var obj = JSON.parse(response);

Teraz używając obj i kropka(.) operator możesz uzyskać dostęp do Właściwości obiektu JSON.

Spróbuj uruchomić polecenie

console.log(obj.result);
 19
Author: Pushkar Kathuria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:11:55

Jeśli chcesz

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

Możesz uzyskać dostęp do elementów JSON przez jsonobject za pomocą (.) kropka:

JsonObject.result;
JsonObject.count;
 17
Author: user5676965418,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:10:07

Myślałem, że zadziała. Ale w zależności od przeglądarki, może warto użyć eval('('+myObject+')'). Jedynym problemem, na który mogę polecić zwracanie uwagi, jest wielopoziomowa lista w JSON.

 11
Author: ha9u63ar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 10:38:37

Łatwy sposób na to:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
 9
Author: yassine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:13:11

Jeśli używasz jQuery, jest to proste:

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
 4
Author: legendJSLC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-06 14:01:18

Jeśli używasz Dojo Toolkit :

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});
 4
Author: Brendon-Van-Heyzen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:13:49

Jak wspomniano przez wielu innych, większość przeglądarek obsługuje JSON.parse i JSON.stringify.

Teraz, chciałbym również dodać, że jeśli używasz AngularJS (który Gorąco polecam), to również zapewnia funkcjonalność, której potrzebujesz:

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)

Chciałem tylko dodać rzeczy o AngularJS, aby zapewnić inną opcję. Zauważ, że AngularJS oficjalnie nie obsługuje Internet Explorer 8 (i starszych wersji, o to chodzi), choć dzięki doświadczeniu większość rzeczy wydaje się działa całkiem dobrze.

 4
Author: user2359695,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:14:40