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?
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
}};
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.
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));
Роман Зыков
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');*/ });
105519 0 0 cookie-check JavaScript-Objekt in JSON-String serialisieren yes