lenny: Aus einem Javascript Object ein Javascript-Code generieren ...

Hallo,

wie kann ich aus einem Javascript Objekt, wie z.B. einem Array, einen Javascript Code erzeugen:

var arr = new Array();
arr["a"] = 1;
arr["b"] = 2;

var str = ????(arr);

str soll enthalten: '{"a":1,"b":2}'

Wie heisst die Funktion '????' ?

Gruss lenny.

  1. Hallo,

    var arr = new Array();
    arr["a"] = 1;
    arr["b"] = 2;

    Das ist kein wirklicher Array, sondern ein bloßes Object. Du solltest dann auch ein Object verwenden, weil du dem Arrayobjekt hier Objekteigenschaften, aber keine Array-Einträge hinzufügst.

    var obj = {}; // Kurzschreibweise für new Object()
    obj.a = 1;
    obj.b = 2;

    var str = ????(arr);

    str soll enthalten: '{"a":1,"b":2}'

    Wie heisst die Funktion '????' ?

    Diese Funktion gibt es nicht, die muss man sich schreiben. Das Format heißt JSON und unter dem Begriff findest du auch entsprechende Funktionen.

    http://www.json.org/json2.js, darin die Funktion JSON.stringify()

    Mathias

    1. Hallo Mathias,

      das ist zwar gut, aber nicht so einfach, wie es ausschaut. Man muss fuer jeden Objekttyp noch eine toJSON Methode schreiben. Die Klasse kann aber noch nicht einmal Arrays linearesieren. Was nun? Gibt es da nicht vielleicht doch noch eine andere Möglichkeit? Eine Art "uneval"? Oder wie würde denn notfalls ein Array.toJSON geschrieben?

      Vielen Dank schon jetzt für die Unterstützung.

      Gruss lenny.

      1. das ist zwar gut, aber nicht so einfach, wie es ausschaut. Man muss fuer jeden Objekttyp noch eine toJSON Methode schreiben.

        Wieso das?

        Die Klasse kann aber noch nicht einmal Arrays linearesieren.

        Nicht? Bei mir schon.

        var x = JSON.parse('[0,1,2,3]') ;  
        alert(x.join('\n'));  
        
        

        Struppi.

      2. Die Klasse kann aber noch nicht einmal Arrays linearesieren.

        Ach du meinst umgekehrt:
        Auch das geht:

        var x = JSON.stringify([0,1,2,3]) ;  
        alert(x);  
        
        

        Struppi.

      3. Hallo,

        Man muss fuer jeden Objekttyp noch eine toJSON Methode schreiben.

        Das Script erweitert absichtlich NICHT alle Array-Elemente prototypisch, d.h. es gibt kein arr.toJSON.

        Das gabs glaube ich in einer früheren Version des Scriptes mal, man hat es aber aus guten Gründen verworfen. Bei Array, String, Number etc. ist das kein Problem, problematisch wirds aber bei Object. (Object.prototype sollte man möglichst nicht erweitern.)

        (Und du willst ein Object, keinen Array linearisieren, zumindest in deinem Beispiel.)

        Mathias