toJSON für KnuddelsObjekte
JSON.stringify versucht intern, toJSON für Objekte aufzurufen. Da Knuddels diese Funktion nicht einbaut, führt es dazu, dass beim stringifien für einen User z.B. nur "User" da steht.
Ich wünsche mir, dass Knuddels diese Funktion für alle Objekte sinnvoll anbieten. z.B. beim User:
User.prototype.toJSON = function toJSON() {
return '(User) ' + this.getNick();
};
Dies ist zwar bei vielen Objekten selber machbar, bei machen aber nicht, da Prototype = null
Ahoi,
diese Idee ist zu unkonkret. Bitte konkret einzelne Wünsche mit Begründung für bestimmte Klassen äußern.
Color haben wir nun hinzugefügt.
DiceConfiguration und KnuddelAmount hatten bereits toString-Methoden.
Knuddelige Grüße
Ironist
-
Dean Kaspar commented
Es ist für alle Objekte selber machbar wenn man einen "replacer" und "reviver" verwendet (siehe JSON.stringify() und JSON.parse()).
Ich hoffe du schlägst grad nicht allen Ernstes vor, dass ich jedes mal bei JSON Stringify einen replacer schreiben soll bzw. ein reviver :-D
Gerade bei verschachtelten Objekten ein Graus jedes mal neu einen reviver angepasst zu schreibenAnsonsten andere Sinnvolle Objekte:
Color
HTMLFile
DiceConfiguration
KnuddelAmount
ggf DiceResults -
Finomosec commented
Es ist für alle Objekte selber machbar wenn man einen "replacer" und "reviver" verwendet (siehe JSON.stringify() und JSON.parse()).
-
Finomosec commented
Die ist nicht ohne Weiteres machbar, da nicht definiert ist in welche Form z.B. ein User oder sonstiges API-Objekt in JSON dargestellt werden soll.
z.B. könnte ein User in ein komplexes JS-Objekt mit diversen Feldern (alle Attribute) serialisiert werden. Oder aber nur die User-ID oder der Nick.
Und als zweites wäre die Frage der Rück-Konvertierung. Kann das generierte JSON wieder in die Originale Datenstruktur zurück ge'parse'd werden?
Bei dem vorgeschlagenen Ansatz wird aus dem User nach stringify+parse ein String.Eine Rückkonvertierung dieses Strings ist aber ohne Weiteres nicht sinnvoll, weil sonst jeder String der zufällig dem gegebenen Muster entspricht beim parse() zu einem User wird.
Des Weiteren wäre die Frage was passiert wenn das generierte JSON zum Client gesendet wird. Ein Blauäugiger Entwickler würde nun evtl. erwarten er bekommt dann auch auf der Clientseite wieder einen "KnuddelsServer" oder einen richtigen "User" raus mit dem er genauso wie im Server arbeiten kann. Was aber so natürlich nicht der Fall ist.
Nun selbst wenn man sich nun auf ein Format einigt und dieses implementiert bleibt immer noch die Frage: Wozu das ganze? Warum will jemand API-Objekte serialisieren?
Für das User-Objekt hat dies einen gewissen Sinn und bei setObject/getObject wird dies auch intern komplett unterstützt. Falls dies für bestimmte weitere Objekte sinnvoll wäre lässt sich darüber reden. Aber eine generelle Logik für alle Objekte erachte ich als sinnfrei.