Dlaczego JavaScript używa JSON.stringify zamiast JSON.serialize?


18

Zastanawiam się tylko nad „stringify” vs „serialize” . Dla mnie są to to samo (chociaż mogę się mylić), ale z mojego przeszłego doświadczenia (głównie z ) używam Serialize()i nigdy nie używam Stringify().

Wiem, że mogę utworzyć prosty alias w JavaScript,

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

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

ale zastanawiam się tylko nad różnicą między nimi i dlaczego wybrano strify.


dla celów porównania, oto jak serializować XML do łańcucha w 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
Właściwie nie możesz tak po prostu zrobić JSON.serialize = JSON.stringify?
Daniel DiPaolo,

dlaczego tak możesz.
Chase Florell,

1
Przypuszczam, że po ponownym przeczytaniu mojego pytania widzę, że w moim przykładzie C # serializuję XML, a następnie konwertujesz serializowany obiekt ToString();. Tam jest pocieranie.
Chase Florell,

Chyba dla ciągłości, lepiej (dla mnie) byłoby mieć metodę, która wygląda tak ... JSON.serialize(obj).toString();lub jsonObject().toString();... w ten sposób wyglądałaby podobnie do mojego C # ... ale teraz to komplikuję.
Chase Florell,

Odpowiedzi:


12

Przyjrzyj się bliżej dwóm komentarzom, które postawiłeś na pytanie:

Przypuszczam, że po ponownym przeczytaniu mojego pytania widzę, że w moim przykładzie w C # serializuję XML, a następnie konwertujesz serializowany obiekt ToString () ;. Tam jest pocieranie.

i

Myślę, że dla ciągłości lepiej (dla mnie) byłoby mieć metodę, która wygląda następująco ... JSON.serialize (obj) .toString (); lub jsonObject (). toString (); ... w ten sposób wyglądałoby to bardzo podobnie do mojego C # ... ale teraz to komplikuję.

Teraz pamiętaj, że w JavaScript, obiekt jest skrótem (raczej, jeśli używasz Prototype lub innego frameworka, powinien zostać zakwalifikowany jako „specjalny rodzaj skrótu” - ale prosta forma działa w tym przykładzie):

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

Jedynym powodem, dla którego serialize()może być konieczne w Javascript, jest wycięcie funkcji, odniesień do innych obiektów itp.

Wracając do przykładu w języku C # - właśnie przestaliśmy .Serialize()być niepotrzebni. Obiekt jest skrótem, jest już zserializowany, dalsza „serializacja” i tak musiałaby być wykonana ręcznie we własnym kodzie. Pozostaje ci tylko to .ToString().

Czy .stringify()ma to teraz większy sens?


tak, stringify ma sens, jednak nadal wolałbym używać.toString()
Chase Florell

7
toString może znaczyć wszystko. JSON.stringify to wyraźnie JSON.
Brandon

11

Wynika to z faktu, że notacja JSON została określona w 1999 r., A nie po 2002 r. ( Została asp.netwydana w tym roku). więc myślę, że nie wiedzieli o serialize.

Żarty na bok,

Słysząc to słowo serialization, pierwszą rzeczą, która przychodzi mi na myśl, jest konwersja danych na bajty, tutaj JSON.stringify ma doskonały sens, ponieważ przekształca obiekt w reprezentację łańcuchową, a nie bajtową.

PS:

@Case Florell, nie można po prostu dodać JSON.serialize, ponieważ w trybie ścisłym ten kod może się nie powieść w niektórych przeglądarkach.

jak JSONnie jest to twój przeciętny Obiekt.


Wydaje mi się, że w moim (ograniczonym) doświadczeniu serializowanie czegoś zawsze przekształciło go w jakiś ciąg znaków do płaskiego przechowywania plików. Rozumiem jednak, co mówisz.
Chase Florell

Myślałem, że to był 2001 .. zobacz wikipedia . Nazwa była prawdopodobnie osobistą preferencją Douglasa Crockforda. 1999 jest rokiem, w którym wyszedł trzeci standard ECMA, na którym opiera się JSON.
Martijn Pieters

1
Serializacja @ChaseFlorell po prostu dosłownie odnosi się do przekształcenia obiektu w pamięci w ciągły, ciągły format danych, aby mógł być zawarty w atomie, uważam, że bardziej powszechną metodą wykonania tego byłoby odwrotna reprezentacja, do wysyłania przez sieci lub inne tego typu.
Jimmy Hoffa,

@avinashr, re: your ps: edit ... to skrzypce nie wydają się zawieść. czy możesz wyjaśnić, w jaki sposób „ JSONnie jest twoim przeciętnym przedmiotem”? Nie jestem ponury, po prostu niejasne, co masz na myśli.
Chase Florell,

2
@ChaseFlorell jest poprawny - w odniesieniu do Javascript JSON jest podzbiorem prawidłowych obiektów JavaScript. Zobacz moją odpowiedź na prosty przykład: Wszystkie poprawne JSON są poprawnymi obiektami / skrótami JavaScript, ale nie wszystkie obiekty / skróty JavaScript są poprawnymi JSON. Jest nawet w nazwie - JSON oznacza „JavaScript Object Notation”.
Izkata,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.