Mengapa Javascript menggunakan JSON.stringify alih-alih JSON.serialize?

18

Saya hanya ingin tahu tentang "stringify" vs "serialize" . Bagi saya mereka adalah hal yang sama (meskipun saya bisa salah), tetapi dalam pengalaman masa lalu saya (kebanyakan dengan ) saya menggunakan Serialize()dan tidak pernah menggunakan Stringify().

Saya tahu saya bisa membuat alias sederhana di Javascript,

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

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

tapi saya hanya ingin tahu tentang perbedaan antara keduanya dan mengapa memilih dipilih.


untuk tujuan perbandingan, inilah cara Anda membuat serialisasi XML ke String di 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();
}
Chase Florell
sumber
7
Sebenarnya tidak bisakah kamu lakukan saja JSON.serialize = JSON.stringify?
Daniel DiPaolo
kenapa ya kamu bisa.
Chase Florell
1
Saya kira setelah membaca kembali pertanyaan saya, saya melihat bahwa dalam contoh C # saya, saya membuat serialisasi XML dan MAKA mengubah objek serial ToString();. Ada inlies menggosok.
Chase Florell
Saya kira untuk kontinuitas, akan lebih baik (bagi saya) untuk memiliki metode yang terlihat seperti ini ... JSON.serialize(obj).toString();atau jsonObject().toString();... dengan cara ini akan terlihat seperti C # saya ... tapi sekarang saya terlalu memperumitnya.
Chase Florell

Jawaban:

12

Lihatlah lebih dekat dua komentar yang Anda ajukan pada pertanyaan:

Saya kira setelah membaca kembali pertanyaan saya, saya melihat bahwa dalam contoh C # saya, saya membuat serialisasi XML dan MAKA mengubah objek serial ToString () ;. Ada inlies menggosok.

dan

Saya kira untuk kontinuitas, akan lebih baik (bagi saya) untuk memiliki metode yang terlihat seperti ini ... JSON.serialize (obj) .toString (); atau jsonObject (). toString (); ... dengan cara ini akan terlihat seperti C # saya ... tapi sekarang saya terlalu memperumitnya.

Sekarang ingat bahwa dalam Javascript, objek adalah hash (lebih tepatnya, jika menggunakan Prototipe atau kerangka kerja lain, itu harus dikualifikasikan sebagai "jenis hash khusus" - tetapi bentuk sederhana berfungsi untuk contoh ini):

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

Satu-satunya alasan yang serialize()mungkin diperlukan dalam Javascript adalah untuk memotong fungsi, referensi ke objek lain, dll.

Jadi, untuk kembali ke contoh C # Anda - kami baru saja memotong .Serialize()sebagai tidak perlu. Objek adalah hash, sudah serial, lebih jauh "serialisasi" harus dilakukan secara manual dalam kode Anda sendiri. Yang tertinggal hanyalah Anda .ToString().

Apakah .stringify()lebih masuk akal sekarang?

Izkata
sumber
ya, merangkai masuk akal, namun saya masih lebih suka menggunakan.toString()
Chase Florell
7
toString bisa berarti apa saja. JSON.stringify jelas JSON.
Brandon
11

Ini karena notasi JSON tersebut ditentukan pada tahun 1999 tidak setelah tahun 2002 ( asp.netdirilis pada tahun itu). jadi saya kira mereka tidak tahu tentang serialize.

Jokes terpisah,

Mendengar kata itu serialization, hal pertama yang muncul di pikiran saya adalah seperti mengubah data menjadi byte, di sini JSON.stringify masuk akal karena mengubah objek ke representasi string bukan representasi byte.

PS:

@Chase Florell, Anda tidak bisa hanya menambahkan JSON.serialize, seperti dalam mode ketat, kode ini mungkin sebenarnya gagal di beberapa browser.

karena JSONbukan Obyek rata-rata Anda.

Avinash R
sumber
Saya kira dalam pengalaman saya (terbatas), serialisasi sesuatu selalu mengubahnya menjadi beberapa bentuk string untuk penyimpanan file datar. Saya mengerti apa yang Anda katakan.
Chase Florell
Saya pikir itu tahun 2001 .. lihat wikipedia . Nama itu mungkin merupakan preferensi pribadi Douglas Crockford. 1999 adalah tahun standar ECMA ke-3 keluar, di mana JSON didirikan.
Martijn Pieters
1
@ChaseFlorell serialisasi secara harfiah mengacu pada mengubah objek dalam memori menjadi format data bersebelahan secara serial sehingga mungkin terkandung secara atom, saya percaya metode yang lebih umum untuk melakukannya adalah representasi pada saat bersamaan, untuk mengirim melalui jaringan atau lainnya.
Jimmy Hoffa
@avinashr, re: id Anda : edit ... biola ini sepertinya tidak gagal. dapatkah Anda menjelaskan bagaimana " JSONbukan Obyek rata-rata Anda"? Saya tidak marah, hanya tidak jelas tentang apa yang Anda maksud.
Chase Florell
2
@ChaseFlorell benar - berkaitan dengan Javascript, JSON adalah bagian dari objek Javascript yang valid. Lihat jawaban saya untuk contoh sederhana: Semua JSON yang valid adalah objek Javascript / hash yang valid, tetapi tidak semua objek / hash Javascript adalah JSON yang valid. Itu bahkan dalam namanya - JSON singkatan dari "JavaScript Object Notation".
Izkata