Ich möchte eine JSON-Zeichenfolge in JavaScript analysieren. Die Antwort ist so etwas wie
var response="{"result":true,"count":1}";
Wie bekomme ich die Werte result
und count
davon?
Ich möchte eine JSON-Zeichenfolge in JavaScript analysieren. Die Antwort ist so etwas wie
var response="{"result":true,"count":1}";
Wie bekomme ich die Werte result
und count
davon?
Andi E
Die Standardmethode zum Analysieren von JSON in JavaScript ist JSON.parse()
Die JSON
API wurde mit eingeführt ES5 (2011) und wurde seitdem in >99 % der Browser nach Marktanteil implementiert, und Node.js. Seine Verwendung ist einfach:
const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);
Die einzige Zeit, die Sie nicht nutzen können JSON.parse()
ist, wenn Sie für einen alten Browser wie IE 7 (2006), IE 6 (2001), Firefox 3 (2008), Safari 3.x (2009) usw. programmieren. Alternativ können Sie sich in einer esoterischen JavaScript-Umgebung befinden das enthält nicht die Standard-APIs. Verwenden Sie in diesen Fällen json2.jsdie Referenzimplementierung von JSON, geschrieben von Douglas Crockford, dem Erfinder von JSON. Diese Bibliothek stellt eine Implementierung von bereit JSON.parse()
.
Bei der Verarbeitung extrem großer JSON-Dateien JSON.parse()
kann aufgrund seiner synchronen Natur und seines Designs ersticken. Um dies zu beheben, empfiehlt die JSON-Website Bibliotheken von Drittanbietern wie z Oboe.js und Klarinettedie Streaming-JSON-Parsing bereitstellen.
jQuery hatte einmal eine $.parseJSON()
Funktion, wurde aber mit jQuery 3.0 als veraltet markiert. Jedenfalls war es lange Zeit nicht mehr als eine Hülle JSON.parse()
.
@Marwan: IE 8+ unterstützt JSON.parse()
. Für IE 6, 7 und andere ältere Browser können Sie die json2.js verwenden, auf die ich in meinem Beitrag verlinkt habe. Alternativ, aber weniger sicher, können Sie verwenden eval
.
– Andi E
16. November 2011 um 9:46 Uhr
Es sei denn, er braucht es auch JSON.stringify()
– Meister der Diebe
9. Mai 2012 um 11:19 Uhr
Hinweis für Prüfer: Bitte überprüfen Sie Peer-Bearbeitungen gründlich, bevor Sie sie zulassen, da Ihre Aktionen unerwünschte Nebeneffekte für Benutzer verursachen können, die Code aus Antworten kopieren und einfügen.
– Andi E
2. April 2013 um 9:42 Uhr
Es ist nicht erforderlich, zuerst nach nativer Unterstützung zu suchen und dann auf jQuery zurückzugreifen. jQuery 1.10 versucht JSON.parse
zuerst, dann die eigene Implementierung. jQuery 2.x ruft direkt auf JSON.parse
ohne Prüfung oder Fallback.
– Jascha
4. November 2013 um 15:29 Uhr
Details zur Browserunterstützung: Kann ich JSON-Parsing verwenden?
– Peter V. Mørch
7. Januar 2014 um 10:11 Uhr
Clarence Fredericks
WARNUNG!
Diese Antwort stammt aus einer alten Ära der JavaScript-Programmierung, in der es keine integrierte Möglichkeit gab, JSON zu analysieren. Die hier gegebenen Ratschläge sind nicht mehr anwendbar und wahrscheinlich gefährlich. Aus heutiger Sicht ist das Parsen von JSON durch Einbeziehen von jQuery oder Aufrufen von eval() Unsinn. Sofern Sie IE 7 oder Firefox 3.0 nicht unterstützen müssen, ist der richtige Weg zum Analysieren von JSON JSON.parse().
Zunächst müssen Sie sicherstellen, dass der JSON-Code gültig ist.
Danach würde ich empfehlen, eine JavaScript-Bibliothek wie jQuery oder Prototype zu verwenden, wenn Sie können, da diese Dinge in diesen Bibliotheken gut gehandhabt werden.
Wenn Sie andererseits keine Bibliothek verwenden möchten und für die Gültigkeit des JSON-Objekts bürgen können, würde ich den String einfach in eine anonyme Funktion packen und die eval-Funktion verwenden.
Dies wird nicht empfohlen, wenn Sie das JSON-Objekt aus einer anderen Quelle erhalten, die nicht absolut vertrauenswürdig ist, da die Evaluierungsfunktion, wenn Sie so wollen, abtrünnigen Code zulässt.
Hier ist ein Beispiel für die Verwendung der eval-Funktion:
var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);
Wenn Sie kontrollieren, welcher Browser verwendet wird, oder wenn Sie sich keine Sorgen um ältere Browser machen, können Sie immer die JSON.parse-Methode verwenden.
Das ist wirklich die ideale Lösung für die Zukunft.
Großartiger Mann! Ich konnte die JSON-Bibliothek nicht importieren, da sie mit anderen Bibliotheken in Konflikt stand
– Tahir Malik
1. Oktober 2012 um 16:09 Uhr
eval() ist in Ordnung, um einen Job zu erfüllen, während es jedes Javascript-Programm kompilieren und ausführen kann, also kann es sein Sicherheitsprobleme. Ich denke, JSON.parse() ist eine bessere Wahl.
– ray6080
10. September 2013 um 11:58 Uhr
Hinweis für Passanten: Hier ist ein gutes Online-Tool, um zu überprüfen, ob Ihre JSON-Zeichenfolge gültig ist: jsonlint.com
– Amal Murali
30. Juli 2014 um 15:40 Uhr
NEIN NEIN NEIN!!! Die Verwendung von eval zur Auswertung von JSON ist eine wirklich gefährliche Idee. Sind Sie sich zu 100 % sicher, dass keine Möglichkeit besteht, dass jemand seinen eigenen Code in Ihren String einfügt?
– Karl
21. Juli 2015 um 18:07 Uhr
Erwähnenswert ist, dass es so etwas wie ein nicht gibt JSON-Objekt.
– Jezen Thomas
2. September 2016 um 15:29 Uhr
Meilenstil
Wenn Sie dies von einer externen Website erhalten, kann es hilfreich sein, getJSON von jQuery zu verwenden. Wenn es sich um eine Liste handelt, können Sie sie mit $.each durchlaufen
$.getJSON(url, function (json) {
alert(json.result);
$.each(json.list, function (i, fb) {
alert(fb.result);
});
});
huwiler
Wenn Sie verwenden möchten JSON3 für ältere Browser können Sie es bedingt laden mit:
<script>
window.JSON ||
document.write('<script src="https://cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>
Jetzt die Norm window.JSON
Objekt steht Ihnen unabhängig davon zur Verfügung, welchen Browser ein Client ausführt.
Joke_Sense10
Das folgende Beispiel soll es verdeutlichen:
let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);
// Output: John Doe, 11
verwenden eval()
ist gefährlich
– Simon B.
26. März 2019 um 14:17 Uhr
@SimonB. Können Sie bitte näher darauf eingehen?
– M. Al Jumaily
8. August 2019 um 18:55 Uhr
@M.AlJumaily siehe softwareengineering.stackexchange.com/questions/311507/… und bringen Sie Ihre Fragen zum nächsten Geek-Treffen für ein kostenloses heißes Thema. Freie Kampfworte zu erwarten. :-Z
– Simon B.
8. August 2019 um 21:27 Uhr
@SimonB. Danke, ich werde es gründlich lesen 🙂
– M. Al Jumaily
8. August 2019 um 21:29 Uhr
Peter Mortensen
Wenn Sie eine Zeichenfolgenvariable (eine wohlgeformte JSON-Zeichenfolge) von MVC @Viewbag mit doppelten Anführungszeichen „““ als Anführungszeichen an JSON.parse übergeben, müssen Sie sie vor JSON.parse verarbeiten (jsonstring
)
var jsonstring = '@ViewBag.jsonstring';
jsonstring = jsonstring.replace(/"/g, '"');
verwenden eval()
ist gefährlich
– Simon B.
26. März 2019 um 14:17 Uhr
@SimonB. Können Sie bitte näher darauf eingehen?
– M. Al Jumaily
8. August 2019 um 18:55 Uhr
@M.AlJumaily siehe softwareengineering.stackexchange.com/questions/311507/… und bringen Sie Ihre Fragen zum nächsten Geek-Treffen für ein kostenloses heißes Thema. Freie Kampfworte zu erwarten. :-Z
– Simon B.
8. August 2019 um 21:27 Uhr
@SimonB. Danke, ich werde es gründlich lesen 🙂
– M. Al Jumaily
8. August 2019 um 21:29 Uhr
nandur93
Sie können entweder die Bewertungsfunktion wie in einigen anderen Antworten verwenden. (Vergessen Sie nicht die zusätzlichen geschweiften Klammern.) Sie werden wissen warum, wenn Sie tiefer graben) oder verwenden Sie einfach die jQuery-Funktion parseJSON
:
var response="{"result":true , "count":1}";
var parsedJSON = $.parseJSON(response);
ODER
Sie können diesen folgenden Code verwenden.
var response="{"result":true , "count":1}";
var jsonObject = JSON.parse(response);
Und Sie können mit auf die Felder zugreifen jsonObject.result
und jsonObject.count
.
Aktualisieren:
Wenn Ihre Ausgabe ist undefined
dann müssen Sie DIESER Antwort folgen. Vielleicht hat Ihr Json-String ein Array-Format. Sie müssen wie folgt auf die json-Objekteigenschaften zugreifen
var response="[{"result":true , "count":1}]"; // <~ Array with [] tag
var jsonObject = JSON.parse(response);
console.log(jsonObject[0].result); //Output true
console.log(jsonObject[0].count); //Output 1
jsonObject.count im console.log gibt undefiniert zurück. Wie soll ich es nennen?
– Sahar Ch.
21. Mai 2014 um 16:27 Uhr
Verwenden Sie eval nicht zum Analysieren von JSON, insbesondere wenn eine unbekannte Partei die Daten senden kann. Eine Funktion kann in einen String eingeschlossen werden!
– Ray Kim
5. November 2020 um 6:06 Uhr
var json = ‘{“Ergebnis”:true,”count”:1}’, obj = JSON.parse(json); console.log(obj.count); // bei Verwendung in nodejs dann Konsole verwenden
– Shechar Tyagi
19. Dezember 2016 um 13:06 Uhr