Frage

Wie können Sie eine gegebene Zeichenfolge mit JSON-Daten sicher in ein JavaScript-Objekt umwandeln?

Offensichtlich können Sie dies auf unsichere Weise mit etwas wie ... tun.

var obj = eval("(" + json + ')');

...aber das macht uns anfällig für den JSON-String, der anderen Code enthält, dessen einfache Auswertung sehr gefährlich erscheint.

War es hilfreich?

Lösung

JSON.parse(jsonString) ist ein reiner JavaScript-Ansatz, sofern Sie einen einigermaßen modernen Browser garantieren können.

Andere Tipps

Die jQuery-Methode ist jetzt veraltet.Verwenden Sie stattdessen diese Methode:

let jsonObject = JSON.parse(jsonString);

Ursprüngliche Antwort mit veralteter jQuery-Funktionalität:

Wenn Sie jQuery verwenden, verwenden Sie einfach:

jQuery.parseJSON( jsonString );

Es ist genau das, was Sie suchen (siehe jQuery Dokumentation).

Bearbeiten:Diese Antwort gilt für IE <7. Für moderne Browser lesen Sie Jonathans Antwort oben.

Bearbeiten:Diese Antwort ist veraltet und Jonathans Antwort oben (JSON.parse(jsonString)) ist jetzt die beste Antwort.

JSON.org verfügt über JSON-Parser für viele Sprachen, darunter vier verschiedene für Javascript.Ich glaube, die meisten Leute würden darüber nachdenken json2.js ihre Goto-Implementierung.

Verwenden Sie den im Folgenden dargestellten einfachen Code Link auf MSDN.

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

und umgekehrt

var str = JSON.stringify(arr);

Ich bin mir nicht sicher, ob es andere Möglichkeiten gibt, aber hier erfahren Sie, wie Sie es machen Prototyp (JSON-Tutorial).

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

Berufung evalJSON() mit true, da das Argument die eingehende Zeichenfolge bereinigt.

Das scheint das Problem zu sein:

Eine Eingabe wird über einen Ajax-Websocket usw. empfangen und erfolgt immer im String-Format. Sie müssen jedoch wissen, ob sie JSON.parsable ist.Das Problem ist, dass, wenn Sie es immer über eine JSON.parse ausführen, das Programm möglicherweise „erfolgreich“ fortgesetzt wird, in der Konsole jedoch immer noch eine Fehlermeldung mit dem gefürchteten „Fehler:“ angezeigt wird.unerwartetes Token 'x'".

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

Wenn Sie verwenden jQuery, Sie können es auch einfach tun $.getJSON(url, function(data) { });

Dann können Sie Dinge tun wie data.key1.something, data.key1.something_else, usw.

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Dem Rückruf werden die zurückgegebenen Daten übergeben, bei denen es sich um ein JavaScript-Objekt oder -Array handelt, wie durch die JSON-Struktur definiert und mithilfe von analysiert $.parseJSON() Methode.

Nur zum Spaß, hier ist die Art und Weise, wie man die Funktion verwendet:

 jsonObject = (new Function('return ' + jsonFormatData))()

Versuchen Sie, die Methode mit diesem Datenobjekt zu verwenden.ex:Data='{result:true,count:1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

Diese Methode hilft in Nodejs wirklich, wenn Sie mit der Programmierung serieller Schnittstellen arbeiten

Die Verwendung von JSON.parse ist wahrscheinlich der beste Weg.Hier ist ein Beispiel Live-Demo

var jsonRes = '{ "students" : [' +
          '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
          '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
          '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);

Der einfachste Weg parse() Methode:

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

dann können Sie die Werte der erhalten Json Elemente, zum Beispiel:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

Benutzen jQuery wie in der beschrieben Dokumentation:

JSON.parse(jsonString);

Ich habe einen „besseren“ Weg gefunden:

In CoffeeScript:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

In Javascript:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
JSON.parse(jsonString);

json.parse wird in ein Objekt umgewandelt.

JSON-Parsing ist immer eine Nervensäge.Wenn die Eingabe nicht den Erwartungen entspricht, wird ein Fehler ausgegeben und Ihre Aktion stürzt ab.Sie können die folgende kleine Funktion verwenden, um Ihre Eingabe sicher zu analysieren.Es dreht ein Objekt immer um, auch wenn die Eingabe ungültig ist oder bereits ein Objekt ist, was in den meisten Fällen besser ist.

JSON.safeParse = function (input, def) {
  // Convert null to empty object
  if (!input) {
    return def || {};
  } else if (Object.prototype.toString.call(input) === '[object Object]') {
    return input;
  }
  try {
    return JSON.parse(input);
  } catch (e) {
    return def || {};
  }
};

Das Konvertieren des Objekts in JSON und das anschließende Parsen funktioniert bei mir wie folgt:

JSON.parse(JSON.stringify(object))

Wenn wir eine Zeichenfolge wie diese haben:"{" Status ": 1," Token ":" 65B4352B2DFC4957A09ADD0CE5714059 ""} "Dann können wir einfach JSON.Parse zweimal verwenden, um diesen String in ein JSON -Objekt zu konvertieren:

var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)

Und ganz einfach können wir Werte aus einem JSON-Objekt extrahieren, indem wir Folgendes verwenden:

    // instead of last JSON.parse:
    var { status, token } = JSON.parse(jsonString);

Das Ergebnis wird sein:

status = 1 and token = 65b4352b2dfc4957a09add0ce5714059

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

Zum besseren Verständnis drücken Sie F12, um „Inspect Element“ in Ihrem Browser zu öffnen, 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 JSON Object.

Führen Sie nun den Befehl aus:-

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

Sie erhalten die Ausgabe als Objekt {Ergebnis:wahr, zähle:1}.

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

var obj = JSON.parse(response);

Mit den Operatoren obj und dot(.) können Sie nun auf die Eigenschaften des JSON-Objekts zugreifen.

Versuchen Sie, den Befehl auszuführen

console.log(obj.result);

Offiziell dokumentiert:

Der JSON.parse() Die Methode analysiert einen JSON-String und erstellt den durch den String beschriebenen JavaScript-Wert oder das JavaScript-Objekt.Eine optionale reviver Es kann eine Funktion bereitgestellt werden, um eine Transformation für das resultierende Objekt durchzuführen, bevor es zurückgegeben wird.

Syntax

JSON.parse(text[, reviver])

Parameter

Text

Die als JSON zu analysierende Zeichenfolge.Eine Beschreibung der JSON-Syntax finden Sie im JSON-Objekt.

Reviver (optional)

Wenn es sich um eine Funktion handelt, schreibt diese vor, wie der ursprünglich durch das Parsen erzeugte Wert transformiert wird, bevor er zurückgegeben wird.

Rückgabewert

Das Objekt, das dem angegebenen JSON-Text entspricht.

Ausnahmen

Löst eine SyntaxError-Ausnahme aus, wenn die zu analysierende Zeichenfolge kein gültiges JSON ist.

Sie können auch verwenden reviver Funktion zum Filtern.

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

Weitere Informationen finden Sie unter JSON.parse

Ältere Frage, ich weiß, aber niemand bemerkt diese Lösung durch die Verwendung new Function(), eine anonyme Funktion, die die Daten zurückgibt.


Nur ein Beispiel:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

Dies ist etwas sicherer, da es innerhalb einer Funktion ausgeführt wird und nicht direkt in Ihrem Code kompiliert wird.Wenn also eine Funktionsdeklaration darin enthalten ist, wird diese nicht an das Standardfensterobjekt gebunden.

Ich verwende dies, um Konfigurationseinstellungen von DOM-Elementen (zum Beispiel das Datenattribut) einfach und schnell zu „kompilieren“.

Analysieren Sie die JSON-Zeichenfolge mit JSON.parse() und die Daten werden zu einem JavaScript-Objekt.

JSON.parse(jsonString)

Hier steht JSON für die Verarbeitung eines JSON-Datensatzes.

Stellen Sie sich vor, wir haben diesen Text von einem Webserver erhalten:

'{ "name":"John", "age":30, "city":"New York"}'

So analysieren Sie ein JSON-Objekt:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

Hier ist obj das jeweilige JSON-Objekt, das wie folgt aussieht.

{ "name":"John", "age":30, "city":"New York"}

Zum Abrufen des verwendeten Werts.Operator-Beispiel:

obj.name // John
obj.age //30

Um das Gegenteil zu tun, konvertieren Sie ein JavaScript-Objekt mit JSON.stringify() in einen String.

Zusammenfassung:

Javascript (sowohl Browser als auch NodeJS) verfügt über eine integrierte Funktion JSON Objekt.Es gibt zwei praktische Methoden für den Umgang mit diesem Objekt JSON.Dies sind die folgenden:

  1. JSON.parse() Dauert JSON Gibt als Argument ein JS-Objekt zurück
  2. JSON.stringify() Nimmt ein JS-Objekt als Argument zurück JSON Objekt

Andere Anwendungen:

Außerdem für eine sehr bequeme Handhabung JSON Sie können für andere Zwecke verwendet werden.Die Kombination aus beidem JSON Mit diesen Methoden können wir sehr einfach tiefe Klone von Arrays oder Objekten erstellen.Zum Beispiel:

let arr1 = [1, 2, [3 ,4]];
let newArr = arr1.slice();

arr1[2][0] = 'changed'; 
console.log(newArr); // not a deep clone

let arr2 = [1, 2, [3 ,4]];
let newArrDeepclone = JSON.parse(JSON.stringify(arr2));

arr2[2][0] = 'changed'; 
console.log(newArrDeepclone); // A deep clone, values unchanged

Wenn Ihr JavaScript vorhanden ist Mootools Die JSON.parse wird vom Framework anonym sein.
Ein gültiger Syntax Eine JSON -Zeichenfolge sicher in ein Objekt zu verwandeln, muss sein:

var object = JSON.decode(string[, secure]);

Darüber hinaus a JSON Request Dadurch kann ein Objekt ausgelöst werden, das direkt analysiert werden kann.
Sie können sich vorstellen, wie es aussieht JSON-Rohdaten Hier:

http://jsfiddle.net/chetabahana/qbx9b5pm/

Probieren Sie Folgendes aus. Dieses ist in Typoskript geschrieben.

         export function safeJsonParse(str: string) {
               try {
                 return JSON.parse(str);
                   } catch (e) {
                 return str;
                 }
           }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top