Siechfred: json

Beitrag lesen

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)