it-swarm.com.de

JSON in JavaScript analysieren?

Ich möchte eine JSON-Zeichenfolge in JavaScript analysieren. Die Antwort ist so etwas wie

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

Wie kann ich daraus die Werte result und count erhalten?

1627
user605334

Die Standardmethode zum Parsen von JSON in JavaScript ist JSON.parse()

Die JSON API wurde mit ES5 (2011) eingeführt und wurde seitdem in> 99% der Browser nach Marktanteil und Node.js implementiert. Die Verwendung ist einfach:

const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);

Sie können JSON.parse() nur dann nicht verwenden, wenn Sie für einen alten Browser programmieren, z. B. IE 7 (2006), IE 6 (2001), Firefox 3 (2008), Safari 3.x (2009) usw. Alternativ befinden Sie sich möglicherweise in einer esoterischen JavaScript-Umgebung, in der die Standard-APIs nicht enthalten sind. Verwenden Sie in diesen Fällen json2.js , die Referenzimplementierung von JSON, die von Douglas Crockford , dem Erfinder von JSON, geschrieben wurde. Diese Bibliothek bietet eine Implementierung von JSON.parse().

Bei der Verarbeitung extrem großer JSON-Dateien kann es vorkommen, dass JSON.parse() aufgrund seiner Synchronität und seines Designs zum Erliegen kommt. Um dies zu beheben, empfiehlt die JSON-Website Bibliotheken von Drittanbietern wie Oboe.js und Klarinette , die Streaming-JSON-Parsing bereitstellen.

jQuery hatte einmal eine $.parseJSON() -Funktion, die jedoch mit jQuery 3.0 veraltet war. Auf jeden Fall war es lange Zeit nichts anderes als ein Wrapper um JSON.parse().

1939
Andy E

ACHTUNG!

Diese Antwort stammt aus einer alten Ära der JavaScript-Programmierung, in der es keinen eingebauten Weg gab, JSON zu analysieren. Der hier gegebene Rat ist nicht länger gültig und wahrscheinlich gefährlich. Aus heutiger Sicht ist das Parsen von JSON mit jQuery oder dem Aufruf von eval () Unsinn. Sofern Sie IE 7 oder Firefox 3.0 nicht unterstützen müssen, lautet die korrekte Methode zum Parsen 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 dies möglich ist, 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 die Zeichenfolge einfach in eine anonyme Funktion einschließen und die eval-Funktion verwenden.

Dies wird nicht empfohlen, wenn Sie das JSON-Objekt von einer anderen Quelle beziehen, die nicht absolut vertrauenswürdig ist, da die eval-Funktion, wenn Sie so wollen, einen abweichenden 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 steuern, welcher Browser verwendet wird, oder wenn Sie sich mit einem älteren Browser keine Sorgen machen, können Sie immer die Methode JSON.parse verwenden.

Dies ist wirklich die ideale Lösung für die Zukunft.

101

Wenn Sie dies von einer externen Site 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);
    });
});
59
milestyle

Das folgende Beispiel verdeutlicht dies:

let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);

// Output: John Doe, 11
36
Joke_Sense10

Wenn Sie JSON für ältere Browser verwenden möchten, können Sie es unter folgenden Bedingungen laden:

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

Jetzt steht Ihnen das Standardobjekt window.JSON zur Verfügung, unabhängig davon, in welchem ​​Browser ein Client ausgeführt wird.

36
huwiler

Wenn Sie eine Zeichenfolgenvariable (eine wohlgeformte JSON-Zeichenfolge) aus MVC @Viewbag an JSON.parse übergeben, die das Anführungszeichen '"' enthält, müssen Sie sie vor JSON.parse (jsonstring) verarbeiten.

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

Sie können die Auswertungsfunktion wie in einigen anderen Antworten verwenden. (Vergessen Sie nicht die zusätzlichen 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);

OR

Sie können diesen Code unten verwenden.

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

Und Sie können mit jsonObject.result und jsonObject.count auf die Felder zugreifen.

28
Teja

Am einfachsten geht das mit der parse() -Methode:

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

dies ist ein Beispiel für das Abrufen von Werten:

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

JSON.parse () konvertiert jeden an die Funktion übergebenen JSON-String in ein JSON-Objekt.

Zum besseren Verständnis drücken Sie F12 Öffnen Sie das Inspect-Element Ihres Browsers und rufen Sie die Konsole auf, um die folgenden Befehle zu schreiben:

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

Führen Sie nun den Befehl aus:

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

Sie erhalten die Ausgabe als Object {result: true, count: 1}.

Um dieses Objekt zu verwenden, können Sie es der Variablen zuweisen, sagen wir obj:

var obj = JSON.parse(response);

Jetzt können Sie mit obj und dem Punktoperator (.) Auf die Eigenschaften des JSON-Objekts zugreifen.

Versuchen Sie, den Befehl auszuführen

console.log(obj.result);
23

Ohne Verwendung einer Bibliothek können Sie eval verwenden - das einzige Mal, das Sie verwenden sollten. Es ist jedoch sicherer, eine Bibliothek zu verwenden.

z.B...

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

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

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

alert('result:'+result+' count:'+count);
20
El Ronnoco

Wenn du möchtest

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

sie können über JsonObject mit (.) Punkt auf die JSON-Elemente zugreifen:

JsonObject.result;
JsonObject.count;
19
user5676965418

Ich dachte JSON.parse(myObject) würde funktionieren. Je nach Browser kann es sich jedoch lohnen, eval('('+myObject+')') zu verwenden. Das einzige Problem, auf das ich achten kann, ist die mehrstufige Liste in JSON.

12
ha9u63ar

Ein einfacher Weg dies zu tun:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
11
yassine

Wenn Sie das Dojo-Toolkit verwenden :

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

Wie von zahlreichen anderen erwähnt, unterstützen die meisten Browser JSON.parse und JSON.stringify.

Nun möchte ich auch hinzufügen, dass wenn Sie AngularJS (was ich sehr empfehle) verwenden, es auch die Funktionalität bietet, die Sie benötigen:

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)

Ich wollte nur das Zeug über AngularJS hinzufügen, um eine andere Option zu bieten. HINWEIS: AngularJS unterstützt Internet Explorer 8 (und ältere Versionen) offiziell nicht, obwohl erfahrungsgemäß die meisten Funktionen recht gut funktionieren.

8
user2359695

Wenn Sie jQuery verwenden, ist das ganz einfach:

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