JavaScript-Objekt in JSON-String serialisieren

Lesezeit: 3 Minuten

Benutzer-Avatar
Kalamarico

Ich habe diesen JavaScript-Prototyp:

Utils.MyClass1 = function(id, member) {
this.id = id;
this.member = member;
}

und ich erstelle ein neues Objekt:

var myobject = new MyClass1("5678999", "text");

Wenn ich mache:

console.log(JSON.stringify(myobject));

Das Ergebnis ist:

{"id":"5678999", "member":"text"}

aber ich brauche den Typ der Objekte, die in der JSON-Zeichenfolge enthalten sein sollen, wie folgt:

"MyClass1": { "id":"5678999", "member":"text"} 

Gibt es eine schnelle Möglichkeit, dies mit einem Framework oder so zu tun? Oder muss ich eine implementieren toJson() Methode in der Klasse und manuell?

Benutzer-Avatar
Jakob Konecki

var myobject = new MyClass1("5678999", "text");
var dto = { MyClass1: myobject };
console.log(JSON.stringify(dto));

BEARBEITEN:

JSON.stringify wird sich verziehen alle ‘Eigenschaften’ Ihrer Klasse. Wenn Sie nur einige von ihnen beibehalten möchten, können Sie sie wie folgt einzeln angeben:

var dto = { MyClass1: {
    property1: myobject.property1,
    property2: myobject.property2
}};

  • Es ist eine gute Idee, aber ich habe nicht nur eine Klasse MyClass, innerhalb von MyClass habe ich viele Attribute, die Objekte sind, und ich weiß es nicht.

    – Kalamarico

    17. November 2011 um 9:38 Uhr

  • Sie könnten myobject.constructor verwenden. Siehe meine Antwort bzw developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… Für mehr Information!

    – Willem Mulder

    17. November 2011 um 10:28 Uhr

Benutzer-Avatar
MSS

Es ist nur JSON? Du kannst stringify() JSON:

var obj = {
    cons: [[String, 'some', 'somemore']],
    func: function(param, param2){
        param2.some="bla";
    }
};

var text = JSON.stringify(obj);

Und parsen Sie wieder zurück zu JSON mit parse():

var myVar = JSON.parse(text);

Wenn Sie Funktionen im Objekt haben, verwenden Sie dies zum Serialisieren:

function objToString(obj, ndeep) {
  switch(typeof obj){
    case "string": return '"'+obj+'"';
    case "function": return obj.name || obj.toString();
    case "object":
      var indent = Array(ndeep||1).join('\t'), isArray = Array.isArray(obj);
      return ('{['[+isArray] + Object.keys(obj).map(function(key){
           return '\n\t' + indent +(isArray?'': key + ': ' )+ objToString(obj[key], (ndeep||1)+1);
         }).join(',') + '\n' + indent + '}]'[+isArray]).replace(/[\s\t\n]+(?=(?:[^\'"]*[\'"][^\'"]*[\'"])*[^\'"]*$)/g,'');
    default: return obj.toString();
  }
}

Beispiele:

Serialisieren:

var text = objToString(obj); //To Serialize Object

Ergebnis:

"{cons:[[String,"some","somemore"]],func:function(param,param2){param2.some="bla";}}"

Deserialisieren:

Var myObj = eval('('+text+')');//To UnSerialize 

Ergebnis:

Object {cons: Array[1], func: function, spoof: function}

Nun, der Typ eines Elements wird nicht standardmäßig serialisiert, also sollten Sie ihn manuell hinzufügen. Zum Beispiel

var myobject = new MyClass1("5678999", "text");
var toJSONobject = { objectType: myobject.constructor, objectProperties: myobject };
console.log(JSON.stringify(toJSONobject));

Viel Glück!

edit: typeof in den richtigen .constructor geändert. Sehen https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/constructor Weitere Informationen zur Konstruktoreigenschaft für Objekte.

Dies könnte nützlich sein.
http://nanodeath.github.com/HydrateJS/
https://github.com/nanodeath/HydrateJS

Verwenden hydrate.stringify um das Objekt zu serialisieren und hydrate.parse zu deserialisieren.

Sie können eine benannte Funktion für den Konstruktor verwenden.

MyClass1 = function foo(id, member) {
    this.id = id;
    this.member = member;
}

var myobject = new MyClass1("5678999", "text");

console.log( myobject.constructor );

//function foo(id, member) {
//    this.id = id;
//    this.member = member;
//}

Sie könnten eine Regex verwenden, um „foo“ aus myobject.constructor zu analysieren und damit den Namen zu erhalten.

Benutzer-Avatar
Elias Hossein

Unten ist eine weitere Möglichkeit, wie wir JSON-Daten mit der Funktion JSON.stringify() erstellen können

var Utils = {};
Utils.MyClass1 = function (id, member) {
    this.id = id;
    this.member = member;
}
var myobject = { MyClass1: new Utils.MyClass1("5678999", "text") };
alert(JSON.stringify(myobject));

Benutzer-Avatar
Роман Зыков

    function ArrayToObject( arr ) {
    var obj = {};
    for (var i = 0; i < arr.length; ++i){
        var name = arr[i].name;
        var value = arr[i].value;
        obj[name] = arr[i].value;
    }
    return obj;
    }

      var form_data = $('#my_form').serializeArray();
            form_data = ArrayToObject( form_data );
            form_data.action = event.target.id;
            form_data.target = event.target.dataset.event;
            console.log( form_data );
            $.post("/api/v1/control/", form_data, function( response ){
                console.log(response);
            }).done(function( response ) {
                $('#message_box').html('SUCCESS');
            })
            .fail(function(  ) { $('#message_box').html('FAIL'); })
            .always(function(  ) { /*$('#message_box').html('SUCCESS');*/ });

1055190cookie-checkJavaScript-Objekt in JSON-String serialisieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy