はじめに
毎回どれがどれだっけとなるので備忘録としてメモしておきます。
シリアライズとデシリアライズ
JSONの処理において、オブジェクトをJSON文字列に変換する処理の方が「シリアライズ(Serialize)」です。
オブジェクトは一般的にはkeyとvalueのペアが含まれており、構造化・階層化がなされています。
これを文字列という、メモリ上で直列に保持される単一の値に変換するため、直列化(シリアライズ)という単語によって表現されているようです。
一方のJSONの文字列をオブジェクトに変換する方は「デシリアライズ(Deserialize)」です。
これはシリアライズの逆で、JSON文字列をオブジェクトに変換します。
プログラミング言語毎の関数名
プログラミング言語によってはシリアライズ・デシリアライズ以外の単語を関数名としているケースがあります。
C#
C#は、素直にSerialize・Deserializeを関数名としています。
learn.microsoft.com
JavaScript
JavaScriptでは、 JSON.stringify()
・ JSON.parse()
という関数名となっています。
developer.mozilla.org
developer.mozilla.org
「JSON文字列化する」、「(JSON文字列を解析して)オブジェクトにする」という意味では、分かりやすい関数名かなと思います。
Go
GoではMarshal・Unmarshalという単語を関数名としています。
pkg.go.dev
Marshalには、オブジェクトをバイト列に変換するという意味があります。
(computing, transitive) To serialize an object into a marshalled state represented by a sequence of bytes that can later be converted back into an object with equivalent properties.
marshal - Wiktionary, the free dictionary
GoのMarshalは、オブジェクトを「JSON文字列」ではなく「JSON文字列のバイト列」に変換します。
そのため、より低レベルな操作である意味を持つ「Marshal」という単語が関数名になっているのだと思われます。
余談ですが、Marshalには「整列させる」、「整理整頓する」という意味があり、そこから「バイト列として整列させる(シリアライズする)」という意味でこの単語が用いられているようです。
Marshalを「整列させる」という意味で用いている例としては、航空機の誘導を行う「マーシャラー」があります。
Python・Ruby
Pythonでは、 json.dumps()
・ json.loads()
という関数名となっています。
docs.python.org
また、Rubyではdump・loadという単語を関数名としています。
docs.ruby-lang.org
これらのプログラミング言語は、シリアライズ・デシリアライズというニュアンスを表現するのではなく、JSON文字列というテキストデータを出力する・読み込む、というニュアンスを表現しているようです。
Rust
Rustのserde_jsonクレートでは、to_string・from_strという関数名となっています。
docs.rs
「JSON文字列化する」、「JSON文字列からオブジェクトを作る」という意味では、JavaScriptと同様に分かりやすい関数名かなと思います。
Java
JavaでJSONを扱うライブラリであるgsonでは、toJson・fromJsonという関数名となっています。
www.javadoc.io
gsonも、JavaScriptやRustのserde_jsonクレートと同様に、JSON文字列の入出力に着目した分かりやすい関数名になっているように感じます。