Perché Javascript utilizza JSON.stringify invece di JSON.serialize?


18

Mi sto solo chiedendo "stringify" vs "serialize" . Per me sono la stessa cosa (anche se potrei sbagliarmi), ma nella mia esperienza passata (principalmente con ) uso Serialize()e non uso mai Stringify().

So di poter creare un semplice alias in Javascript,

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

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

ma mi sto solo chiedendo quale sia la differenza tra i due e perché sia ​​stato scelto stringify.


a scopo di confronto, ecco come serializzare XML su una stringa in C #

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();
}

7
In realtà non puoi semplicemente farlo JSON.serialize = JSON.stringify?
Daniel DiPaolo,

perché sì, puoi.
Chase Florell,

1
Suppongo che dopo aver riletto la mia domanda, sto vedendo che nel mio esempio C #, sto serializzando l'XML e POI la conversione dell'oggetto serializzato ToString();. C'è dentro il problema.
Chase Florell,

Immagino per la continuità, sarebbe meglio (per me) avere un metodo che assomiglia a questo ... JSON.serialize(obj).toString();o jsonObject().toString();... in questo modo assomiglierebbe molto al mio C # ... ma ora sto complicando troppo.
Chase Florell,

Risposte:


12

Dai un'occhiata più da vicino ai due commenti che hai posto sulla domanda:

Suppongo che dopo aver riletto la mia domanda, sto vedendo che nel mio esempio C #, sto serializzando XML e POI convertendo l'oggetto serializzato ToString () ;. C'è dentro il problema.

e

Immagino per la continuità, sarebbe meglio (per me) avere un metodo che assomiglia a questo ... JSON.serialize (obj) .toString (); o jsonObject (). toString (); ... in questo modo sembrerebbe molto simile al mio C # ... ma ora sto complicando troppo.

Ora ricorda che in Javascript, un oggetto è un hash (piuttosto, se si utilizza Prototype o un altro framework, dovrebbe essere qualificato come "tipo speciale di hash" - ma il modulo semplice funziona per questo esempio):

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

L'unico motivo per cui serialize()potrebbe essere necessario in Javascript è tagliare le funzioni, i riferimenti ad altri oggetti, ecc.

Quindi, per tornare al tuo esempio C #, abbiamo appena ritagliato .Serialize()inutile. Un oggetto è un hash, è già serializzato, ulteriori "serializzazioni" dovrebbero comunque essere eseguite manualmente nel proprio codice. Tutto ciò che ti lascia è .ToString().

Ha .stringify()più senso ora?


sì, stringify ha un senso, comunque preferirei comunque usare.toString()
Chase Florell

7
toString potrebbe significare qualsiasi cosa. JSON.stringify è chiaramente JSON.
Brandon,

11

Questo perché quella notazione JSON è stata specificata nel 1999 non dopo il 2002 ( asp.netè stata rilasciata in quell'anno). quindi immagino che non sapessero del serialize.

Scherzi a parte,

Sentendo la parola serialization, la prima cosa che mi viene in mente è come convertire i dati in byte, qui JSON.stringify ha perfettamente senso in quanto converte l'oggetto in una rappresentazione di stringa e non in una rappresentazione di byte.

PS:

@Chase Florell, non puoi semplicemente aggiungere JSON.serialize, come in modalità rigorosa, questo codice potrebbe non riuscire in alcuni browser.

come JSONnon è il tuo oggetto medio.


Immagino nella mia (limitata) esperienza, serializzare qualcosa lo ha sempre convertito in una qualche forma di stringa per l'archiviazione di file flat. Ho capito cosa stai dicendo però.
Chase Florell,

Pensavo fosse il 2001 .. vedi Wikipedia . Il nome era probabilmente una preferenza personale di Douglas Crockford. Il 1999 è l'anno in cui è uscito il terzo standard ECMA, su cui è stata fondata JSON.
Martijn Pieters,

1
La serializzazione di @ChaseFlorell si riferisce letteralmente alla trasformazione di un oggetto in memoria in un formato di dati serialmente contiguo in modo che possa essere contenuto atomicamente, credo che un metodo più comune per farlo sarebbe la rappresentazione bytewise, per l'invio attraverso reti o altro.
Jimmy Hoffa,

@avinashr, re: your ps: edit ... questo violino non sembra fallire. puoi spiegare come " JSONnon è il tuo oggetto medio"? Non sono snarky, solo poco chiaro su cosa intendi.
Chase Florell,

2
@ChaseFlorell è corretto - per quanto riguarda Javascript, JSON è un sottoinsieme di oggetti Javascript validi. Vedi la mia risposta per un semplice esempio: tutto JSON valido è un oggetto / hash Javascript valido, ma non tutti gli oggetti / hash Javascript sono JSON validi. È persino nel nome: JSON sta per "JavaScript Object Notation".
Izkata,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.