Frage JSON in JavaScript analysieren? [Duplikat]


Diese Frage hat hier bereits eine Antwort:

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

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

Wie kann ich die Werte bekommen? result und count davon?


1509
2018-02-08 16:34


Ursprung


Antworten:


Die meisten Browser unterstützen JSON.parse(), die in der 5. Ausgabe von ECMA-262 definiert ist (die Spezifikation, auf der JavaScript basiert). Seine Verwendung ist einfach:

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

alert(obj.count);

Für die Browser, die Sie nicht verwenden können, können Sie es verwenden json2.js.

Wie in den Kommentaren erwähnt, wenn Sie bereits jQuery verwenden, gibt es a $.parseJSON Funktion, die zugeordnet wird JSON.parse wenn verfügbar oder eine Form von eval in älteren Browsern. Dies führt jedoch zusätzliche, unnötige Prüfungen durch, die auch von JSON.parse, also für die beste Allround-Performance empfehle ich, sie so zu benutzen:

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

Dies stellt sicher, dass Sie nativ verwenden JSON.parse Anstatt jQuery auszuführen, führen Sie unmittelbar vor der Übergabe an die native Analysefunktion eine Überprüfung der Integrität der Zeichenfolge durch.


1863
2018-02-08 16:38



Zuerst 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 die Zeichenfolge einfach in eine anonyme Funktion einfügen und die eval-Funktion verwenden.

Dies wird nicht empfohlen, wenn Sie das JSON-Objekt von einer anderen Quelle erhalten, die nicht absolut vertrauenswürdig ist, da die eval-Funktion möglicherweise Renegade-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 Sie sich nicht mit einem älteren Browser Sorgen machen, können Sie immer die JSON.parse-Methode verwenden.

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


91
2018-02-08 16:46



Wenn Sie dies von einer externen Website erhalten, kann es hilfreich sein, jQuerys getJSON zu verwenden. Wenn es eine Liste ist, können Sie sie mit $ .each durchlaufen

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

49
2017-07-18 21:57



Wenn Sie verwenden möchten JSON 3 Für ältere Browser können Sie es bedingt laden:

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

Jetzt der Standard window.JSON Objekt ist für Sie verfügbar, unabhängig davon, welchen Browser ein Client ausführt.


32
2018-04-19 18:52



Das folgende Beispiel wird klarstellen:

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

// Output: x, 11

ODER

Sie können auch die eval Funktion. Das folgende Beispiel verwendet die eval Funktion:

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

// Output: x, 11

Seit der JSON.parse Funktion ist sicherer und führt schneller als die Eval-Funktion, empfehle ich Ihnen zu verwenden JSON.parse Funktion.


31
2017-10-01 07:42



Wenn Sie eine Zeichenfolgevariable (eine wohlgeformte JSON-Zeichenfolge) an JSON.parse von MVC @Viewbag übergeben, die doublequote, '' 'hat, müssen Sie sie als Anführungszeichen vor JSON.parse (jsonstring)

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

25
2017-10-22 15:06



Sie können die eval-Funktion wie in einigen anderen Antworten verwenden. (Vergessen Sie nicht die zusätzlichen Klammern.) Sie werden wissen, warum, wenn Sie tiefer graben, oder einfach die jQuery-Funktion verwenden parseJSON:

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

ODER

Sie können diesen Code unten verwenden.

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

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


24
2018-06-06 03:51



Der einfachste Weg mit parse() Methode:

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

Dies ist ein Beispiel dafür, wie man Werte erhält:

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

23
2018-06-04 14:44



Ohne eine Bibliothek zu verwenden, die Sie verwenden können eval - Die einzige Zeit, die 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);

19
2018-02-08 16:45



JSON.parse () konvertiert alle in die Funktion übergebenen JSON-Zeichenfolgen in ein JSON-Objekt.

Zum besseren Verständnis drücken Sie F12 Öffnen Sie das Inspect-Element Ihres Browsers und gehen Sie zur Konsole, 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.

Jetzt führe den Befehl aus:

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

Sie erhalten die Ausgabe als Objekt {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 mit obj Mit dem Punktoperator (.) können Sie auf die Eigenschaften des JSON-Objekts zugreifen.

Versuchen Sie, den Befehl auszuführen

console.log(obj.result);

19
2018-02-18 10:08