Warum verwendet Javascript JSON.stringify anstelle von JSON.serialize?

18

Ich wundere mich nur über "stringify" vs "serialize" . Für mich sind sie dasselbe (obwohl ich mich irren könnte), aber in meiner Vergangenheit (meistens mit ) ich sie Serialize()und benutze sie nie Stringify().

Ich weiß, ich kann einen einfachen Alias ​​in Javascript erstellen,

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

aber ich wundere mich nur über den Unterschied zwischen den beiden und warum stringify gewählt wurde.


Zum Vergleich: So serialisieren Sie XML in C # in einen String

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}
Chase Florell
quelle
7
Kannst du das nicht einfach tun JSON.serialize = JSON.stringify?
Daniel DiPaolo
warum kannst du ja
Chase Florell
1
Ich nehme an, dass ich nach dem erneuten Lesen meiner Frage in meinem C # -Beispiel das XML serialisiere und DANN das serialisierte Objekt konvertiere ToString();. Da steckt die Unebenheit.
Chase Florell
Ich denke, für die Kontinuität wäre es (für mich) besser, eine Methode zu haben, die so aussieht ... JSON.serialize(obj).toString();oder jsonObject().toString();... auf diese Weise würde sie meinem C # ähneln ... aber jetzt bin ich überfordert, es zu komplizieren.
Chase Florell

Antworten:

12

Sehen Sie sich die beiden Kommentare an, die Sie zu der Frage abgegeben haben:

Ich nehme an, dass ich nach dem erneuten Lesen meiner Frage in meinem C # -Beispiel das XML serialisiere und DANN das serialisierte Objekt ToString (); konvertiere. Da steckt die Unebenheit.

und

Ich denke für die Kontinuität wäre es (für mich) besser, eine Methode zu haben, die so aussieht ... JSON.serialize (obj) .toString (); oder jsonObject (). toString (); ... auf diese Weise würde es sehr nach meinem C # aussehen ... aber jetzt bin ich damit fertig, es zu komplizieren.

Denken Sie jetzt daran, dass ein Objekt in JavaScript ein Hash ist (wenn Sie Prototype oder ein anderes Framework verwenden, sollte es als "spezielle Art von Hash" qualifiziert werden - aber die einfache Form funktioniert für dieses Beispiel):

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

Der einzige Grund, warum ein serialize()Javascript erforderlich sein könnte, ist das Ausschneiden der Funktionen, Verweise auf andere Objekte usw.

Um noch einmal auf Ihr C # -Beispiel zurückzukommen: Wir haben gerade .Serialize()als unnötig herausgeschnitten. Ein Objekt ist ein Hash, es ist bereits serialisiert, eine weitere "Serialisierung" müsste ohnehin manuell in Ihrem eigenen Code erfolgen. Alles was dich verlässt ist .ToString().

Macht .stringify()das jetzt mehr Sinn?

Izkata
quelle
ja, stringify macht Sinn, aber ich würde immer noch lieber verwenden.toString()
Chase Florell
7
toString kann alles bedeuten. JSON.stringify ist eindeutig JSON.
Brandon
11

Dies liegt daran, dass die JSON- Notation 1999 nicht nach 2002 angegeben wurde ( asp.netwird in diesem Jahr veröffentlicht). Ich denke, sie wussten nichts über das serialize.

Spaß beiseite,

Wenn serializationich das Wort höre, kommt mir als erstes die Umwandlung der Daten in Bytes in den Sinn. Hier ist JSON.stringify absolut sinnvoll, da es das Objekt in eine Zeichenfolgendarstellung und nicht in eine Bytedarstellung umwandelt.

PS:

@Chase Florell, Sie können nicht einfach hinzufügen JSON.serialize, da dieser Code im strengen Modus in einigen Browsern tatsächlich fehlschlagen kann.

da JSONist nicht dein durchschnittliches Objekt.

Avinash R
quelle
Nach meiner (eingeschränkten) Erfahrung hat die Serialisierung von etwas immer dazu geführt, dass es in eine Form von Zeichenfolge für die Speicherung von Flatfiles konvertiert wurde. Ich verstehe, was du sagst.
Chase Florell
Ich dachte, es wäre 2001. Siehe Wikipedia . Der Name war wahrscheinlich eine persönliche Präferenz von Douglas Crockford. 1999 ist das Jahr, in dem der 3. ECMA-Standard herauskam, auf dem JSON basiert.
Martijn Pieters
1
@ChaseFlorell-Serialisierung bezieht sich wörtlich auf das Umwandeln eines In-Memory-Objekts in ein seriell zusammenhängendes Datenformat, damit es atomar enthalten sein kann. Ich glaube, eine häufigere Methode hierfür wäre die byteweise Darstellung zum Senden über Netzwerke oder dergleichen.
Jimmy Hoffa
@avinashr, re: your ps: edit ... diese Geige scheint nicht zu versagen. Können Sie erklären, wie " JSONist nicht Ihr durchschnittliches Objekt"? Ich bin nicht snarky, nur unklar, was du meinst.
Chase Florell
2
@ChaseFlorell ist korrekt - in Bezug auf Javascript ist JSON eine Teilmenge gültiger Javascript-Objekte. Ein einfaches Beispiel finden Sie in meiner Antwort: Alle gültigen JSONs sind gültige JavaScript-Objekte / -Hashs, aber nicht alle JavaScript-Objekte / -Hashs sind gültige JSONs. Es ist sogar im Namen - JSON steht für "JavaScript Object Notation".
Izkata