1496 Stimmen

Sichere Umwandlung einer JSON-Zeichenkette in ein Objekt

Angesichts einer Zeichenfolge von JSON-Daten, wie kann ich sicher, dass die Zeichenfolge in ein JavaScript-Objekt zu machen?

Offensichtlich kann ich dies auf unsichere Weise mit etwas wie:

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

aber das macht mich anfällig für die JSON-Zeichenfolge, die anderen Code enthält, der sehr gefährlich erscheint, wenn man ihn einfach auswertet.

88 Stimmen

In den meisten Sprachen birgt eval ein zusätzliches Risiko. Eval lässt eine offene Tür, die von Hackern ausgenutzt werden kann. JEDOCH ist zu bedenken, dass jedes Javascript auf dem Client läuft. ERWARTEN dass sie von Hackern verändert wird. Sie können alles auswerten, was sie wollen, indem sie einfach die Konsole benutzen. Sie müssen Ihren Schutz auf der Serverseite aufbauen.

24 Stimmen

Ok, jetzt haben wir 2014 und Sie sollten niemals eval um eine JSON-Zeichenfolge zu parsen, da Sie Ihren Code der "Code-Injection" aussetzen würden. verwenden JSON.parse(yourString) ではなく

1 Stimmen

Sind die JSON-Daten ein Literal?

25voto

Mark Biek Punkte 140395

Ich bin mir nicht sicher, ob es noch andere Möglichkeiten gibt, aber hier ist, wie man es in Prototyp (JSON-Tutorial) .

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

Aufruf von evalJSON() mit true als Argument bereinigt die eingehende Zeichenkette.

21voto

Leanan Punkte 722

Wenn Sie Folgendes verwenden ジャクエリ können Sie auch verwenden:

$.getJSON(url, function(data) { });

Dann können Sie Dinge tun wie

data.key1.something
data.key1.something_else

usw.

1 Stimmen

Sie verwenden jQuery, nicht wahr?

19voto

lessisawesome Punkte 1255

Nur zum Spaß, hier ist ein Weg, der eine Funktion verwendet:

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

3 Stimmen

Interessanter Ansatz, ich bin nicht sicher, ich würde dies mit JSON.Parse zur Verfügung, aber es ist schön zu sehen, jemand denken außerhalb der Box.

7 Stimmen

Dies ist sehr ähnlich wie die Verwendung von eval zu tun und ist nicht sicher. :P

10 Stimmen

Dies hat alle Nachteile der Verwendung von eval ist aber komplizierter und für die Betreuer schwieriger zu verstehen.

18voto

Bharath Kumaar Punkte 389

Verwendung von JSON.parse ist wahrscheinlich der beste Weg.

Hier ein Beispiel

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);

17voto

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

Dem Callback werden die zurückgegebenen Daten übergeben, bei denen es sich um ein JavaScript-Objekt oder Array handelt, das durch die JSON-Struktur definiert ist und mit der $.parseJSON() Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X