JavascriptがJSON.serializeではなくJSON.stringifyを使用するのはなぜですか?


18

"stringify" vs "serialize"について疑問に思っています。私にはそれらは同じものですが(間違っている可能性はありますが)、過去の経験(主に)ではを使用しSerialize()、使用しませんStringify()

Javascriptで簡単なエイリアスを作成できることは知っていますが、

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

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

しかし、この2つの違いと、なぜstringifyが選択されたのかについて疑問に思っています。


比較目的で、C#でXMLを文字列にシリアル化する方法を次に示します。

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
実際にあなただけではできませんJSON.serialize = JSON.stringifyか?
ダニエルディパオロ

はい、できます。
チェイスフロレル

1
質問を読み直した後、C#の例で、XMLをシリアル化し、シリアル化されたオブジェクトを変換していることがわかりましたToString();。擦れがあります。
チェイスフロレル

連続性のために、(私にとって)このようなメソッドを持つ方が良いと思います... JSON.serialize(obj).toString();またはjsonObject().toString();...この方法は私のC#によく似ています...しかし、今では複雑になっています。
チェイスフロレル

回答:


12

質問に付けた2つのコメントを詳しく見てみましょう。

質問を読み直した後、C#の例で、XMLをシリアル化し、シリアル化されたオブジェクトToString();を変換していることがわかりました。擦れがあります。

そして

連続性を保つには、(私にとって)次のようなメソッドを用意した方が良いと思います... JSON.serialize(obj).toString(); またはjsonObject()。toString(); ...この方法では、C#...によく似ていますが、今では複雑になっています。

Javascriptでは、オブジェクトはハッシュであることを覚えておいてください(Prototypeまたは別のフレームワークを使用する場合は、「特別な種類のハッシュ」として修飾する必要がありますが、この例では単純なフォームが機能します)。

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でa が必要になる唯一の理由は、関数、他のオブジェクトへの参照などを切り取るためです。

したがって、C#の例に戻るために、.Serialize()不要な部分を切り取りました。オブジェクトはハッシュであり、すでにシリアル化されています。とにかく、独自のコードでさらに「シリアル化」を手動で行う必要があります。あなたを残すのはすべてです.ToString()

.stringify()今より多くの意味を作りますか?


はい、文字列化は、しかし、私はまだ、むしろ使用したい、理にかなって.toString()
チェイスFlorell

7
toStringは何を意味してもかまいません。JSON.stringifyは明らかにJSONです。
ブランドン

11

これは、JSON表記が2002年以降でasp.netはなく1999年に指定されたためです(その年にリリースされます)。だから彼らはそのことを知らなかったと思うserialize

冗談を言って、

単語を聞くとserialization、最初に思い浮かぶのは、データをバイトに変換するようなものです。ここでは、JSON.stringifyはオブジェクトをバイト表現ではなく文字列表現に変換するため、完全に理にかなっています。

PS:

@Chase Florell、追加することはできません。JSON.serialize厳格モードの場合、一部のブラウザではこのコードが実際に失敗する可能性があるためです。

JSONあなたの平均的なオブジェクトではありません。


私の(限られた)経験では、何かをシリアル化することは常にフラットファイルストレージ用に何らかの形式の文字列に変換していると思います。私はあなたが言っていることを理解しています。
チェイスフロレル

2001年だと思いました。ウィキペディアを参照してください。名前はおそらくダグラス・クロックフォードの個人的な好みでした。1999年は、JSONが設立された3番目のECMA標準が発表された年です。
マーティンピーターズ

1
@ChaseFlorellのシリアル化とは、文字通り、メモリオブジェクトを連続的に連続したデータ形式に変換することを指し、それがアトミックに含まれる場合があります。
ジミー・ホッファ

@avinashr、再:あなたのPS 編集... このフィドルは失敗しないようです。「JSON平均的なオブジェクトではない」ことを説明できますか?私は陰鬱ではなく、あなたが何を意味するのかはっきりしない。
チェイスフロレル

2
@ChaseFlorellは正しいです。Javascriptに関しては、JSONは有効なJavascriptオブジェクトのサブセットです。簡単な例については私の回答をご覧ください。すべての有効なJSONは有効なJavascriptオブジェクト/ハッシュですが、すべてのJavascriptオブジェクト/ハッシュが有効なJSONではありません。名前でも-JSONは「JavaScript Object Notation」の略です。
イズカタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.