Bedeutet das, dass es nicht möglich ist, JS-Funktionen in den json-String einzuschleusen, die bei dessen Parsen ausgeführt werden?
Nein, ein String ist ein String, selbst wenn er für sich betrachtet eine Javascript-Anweisung ist. Mal angenommen, dein JSON-String sähe so aus:
var JSONString = '{"namen": [ "Manfred", "alert(\'Boo!\');" ] }';
würde beim Parsen via eval nichts passieren, da das alert als String interpretiert würde. Schreibst du statt dessen:
var JSONString = '{"namen": [ "Manfred", alert(\"Boo!\") ] }';
dann würde beim Parsen via eval die Alert-Anweisung ausgeführt werden und der Wert ignoriert. Was daneben möglich wäre:
function fref1() { alert('Funktion 1'); }
function fref2() { alert('Funktion 2'); }
var JSONString = '{"funktionen": [ fref1, fref2 ] }';
var JSONObject = eval( '(' + JSONString + ')' );
JSONObject.funktionen[0]() // Funktion fref1 wird ausgeführt
JSONObject.funktionen[1]() // Funktion fref2 wird ausgeführt
Das Ganze kannst du dann noch auf die Spitze treiben:
function fref(answer) { alert('Die Antwort ist ' + answer); }
var JSONString = '{"foobar": [ 42, function() { fref(this[0]) } ] }';
var JSONObject = eval( '(' + JSONString + ')' );
JSONObject.foobar[1]();
Du wirst erstaunt sein, was da raus kommt ;)
Siechfred
--
Ich bin strenggenommen auch nur interessierter Laie. (molily)
Ich bin strenggenommen auch nur interessierter Laie. (molily)