Parse JSON w JavaScript? [duplikat]
To pytanie ma już odpowiedź tutaj:
- bezpieczne przekształcanie łańcucha JSON w obiekt 25 odpowiedzi
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?
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.
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ść.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);
});
});
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.
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
.
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
.
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(/"/g, '"');
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;
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);
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);
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;
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.
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]; // ;)
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
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);
});
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.
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