Javascript neden JSON.serialize yerine JSON.stringify kullanıyor?


18

Ben sadece "stringify" vs "serialize" merak ediyorum . Bana göre onlar aynı şey (yanlış olsa da), ama geçmiş deneyimimde (çoğunlukla ) kullanıyorum Serialize()ve asla kullanmıyorum Stringify().

Javascript'te basit bir takma ad oluşturabileceğimi biliyorum,

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

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

ama sadece ikisi arasındaki farkı ve stringify'ın neden seçildiğini merak ediyorum.


karşılaştırma amacıyla, XML'i bir dizgiye 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
Aslında yapamaz JSON.serialize = JSON.stringifymısın?
Daniel DiPaolo

neden evet yapabilirsiniz.
Chase Florell

1
Sorumu yeniden okuduktan sonra sanırım benim C # örneğimde, XML serileştiriyorum ve sonra serileştirilmiş nesneyi dönüştürüyorum ToString();. Ovmak var.
Chase Florell

Süreklilik için sanırım, (benim için) şöyle görünen bir yönteme sahip olmak daha iyi olurdu ... JSON.serialize(obj).toString();ya da jsonObject().toString();... bu şekilde C #'ım gibi görünecekti ... ama şimdi bunu çok karmaşık hale getiriyorum.
Chase Florell

Yanıtlar:


12

Soruya koyduğunuz iki yoruma daha yakından bakın:

Benim soru yeniden okuduktan sonra, benim C # örneğinde, XML serileştirme görüyorum ve daha sonra serileştirilmiş nesne ToString (); dönüştürüyorum. Ovmak var.

ve

Süreklilik için sanırım, (benim için) böyle bir yöntem olması daha iyi olurdu ... JSON.serialize (obj) .toString (); veya jsonObject (). toString (); ... bu şekilde C #'ım gibi görünecekti ... ama şimdi çok karmaşıkım.

Şimdi Javascript'te bir nesnenin bir karma olduğunu unutmayın (daha ziyade, Prototip veya başka bir çerçeve kullanılıyorsa, "özel bir karma türü" olarak nitelendirilmelidir - ancak basit form bu örnek için çalışır):

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

serialize()Javascript'te gerekli olabilecek tek neden , işlevleri, diğer nesnelere referansları vb. Kesmek.

Yani, C # örneğinize geri dönmek için - sadece .Serialize()gereksiz olarak kestik . Bir nesne bir karmadır, zaten serileştirilmiştir, daha fazla "serileştirme" yine de kendi kodunuzda manuel olarak yapılmalıdır. Sizi terk eden tek şey .ToString().

.stringify()Şimdi daha mantıklı mı ?


evet, stringify mantıklı, ancak yine de kullanmak istiyorum.toString()
Chase Florell

7
toString herhangi bir şey ifade edebilir. JSON.stringify açıkça JSON'dir.
Brandon

11

Bunun nedeni, JSON gösteriminin 1999'da 2002'den sonra değil ( asp.neto yıl yayınlandığı) belirtilmiş olmasıdır. sanırım onlar hakkında bilmiyorlardı serialize.

Ayrı espriler,

Kelimeyi İşitme serializationbir dize gösterimine bayt değil gösterimi nesneyi dönüştürür olarak benim akla gelen ilk şey bayt veri dönüştürme gibi, burada JSON.stringify çok mantıklı.

Not:

@Chase Florell, JSON.serializekatı modda olduğu gibi, bu kod bazı tarayıcılarda gerçekten başarısız olabilir.

olarak JSONortalama Nesne değil.


Sanırım (sınırlı) deneyimlerime göre, bir şey serileştirmek her zaman düz dosya depolama için dize bir tür dönüştürülüyor. Ne dediğini anlıyorum.
Chase Florell

2001 olduğunu düşündüm .. bkz. Wikipedia . İsim muhtemelen Douglas Crockford'un kişisel bir tercihiydi. 1999, JSON'un kurulduğu 3. ECMA standardının çıktığı yıldır.
Martijn Pieters

1
@ChaseFlorell serileştirme, kelimenin tam anlamıyla bir bellek nesnesini seri olarak bitişik bir veri formatına dönüştürmeyi ifade eder, bu yüzden atomik olarak bulunabilir, ağlar veya diğer türler arasında göndermek için bunu yapmak için daha yaygın bir yöntem olacağını düşünüyorum.
Jimmy Hoffa

@avinashr, re: ps: edit ... bu keman başarısız gözükmüyor. " JSONortalama nesneniz nasıl değil " diye açıklayabilir misiniz ? Sinsi değilim, ne demek istediğin konusunda net değilim.
Chase Florell

2
@ChaseFlorell doğrudur - Javascript ile ilgili olarak, JSON geçerli Javascript nesnelerinin bir alt kümesidir . Basit bir örnek için cevabımı görün: Tüm geçerli JSON geçerli bir Javascript nesnesi / karmasıdır, ancak tüm Javascript nesnesi / karmaları geçerli JSON değildir. Adında bile - JSON "JavaScript Nesne Gösterimi" anlamına gelir.
Izkata
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.