かずきのBlog@hatena さんのブログで紹介されていてたツールで、
というサービスがナウい感じだそうです。
⇩ かずきのBlog@hatena さんのブログ
quicktypeについては、上記サイト様を参照していただくということで。
ということで、いまいち、JSONの理解について曖昧模糊とした感が否めないことこの上ないので、JSONがどんなものか改めて調査してみました。
JSON(JavaScript Object Notation)とは?
そも、JSON とは何ぞや?
JSON(ジェイソン、JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptにおけるオブジェクトの表記法をベースとしているが、JSONはJavaScript専用のデータ形式では決してなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されている。
JSONは多くのプログラミング言語で利用可能である。例えば、ActionScript, C, C++, C#, ColdFusion, Common Lisp, Curl, D言語, Delphi, E, Erlang, Groovy, Haskell, Java, JavaScript (ECMAScript), Lisp, Lua, ML, Objective CAML, Perl, PHP, Python, R, Rebol, Ruby, Scala, Squeakなど。
コンピューターが扱えるようにしたものがデータ記述言語(データ言語)ということらしく、 いろいろな種類があり
- JSON(JavaScript Object Notation)
- XML(Extensible Markup Language)
- HTML(HyperText Markup Language)
- YAML(YAML Ain't a Markup Language)
- CSV (Comma Separated Vector)
このへんが有名ですかね、というか他にどんなものがあるのかよく分からんですが...。 で、Web界隈では有名なAjax(Asynchronous JavaScript + XML)などでJSON形式のデータをやり取りしたりすることが多いようです。
AjaxはGoogleMapで一躍有名になった技術ですね。
JSONをパースするとは?
JSON(JavaScript Object Notation)は名前の通り、JavaScriptのオブジェクトの表記法をベースとしたデータ形式であるため、例えばブラウザ側からJavaScriptなどでサーバー側のJavaなどに渡されるとします。
JavaでJSONを受け取ろうとすると、当然、そんなデータの形(JSON)は理解できないってことになるため、Javaで処理できるようにJSONをパース(解析)することが必要なわけです、たぶん。
⇧ 上記サイト様によると、
Library | License | Link |
---|---|---|
org.json | JSON | MVNRepository.com |
Jackson | Apache License 2.0 | GitHub / MVNRepository.com |
JSONIC | Apache License 2.0 | Official site / MVNRepository.com |
Gson | Apache License 2.0 | GitHub / MVNRepository.com |
JsonPath | Apache License 2.0 | GitHub / MVNRepository.com |
といったライブラリを利用していく形になるようです。
JSONのシリアライズ,デシリアライズとは?
JSONをパース(解析)することを「デシリアライズ」というらしいです。逆にJavaなどのデータをJSONに変換することを「シリアライズ」というようです。
ちょっと、いまいち「パース」「シリアライズ」「デシリアライズ」の用語の関係性がつかみきれていないのですが、Javaの場合で考えると、
となるようですね。
クライアントでJavaScript、サーバーでJavaを使う場合(JSONデータ取扱)の想像図
⇧ みたいなイメージですかね。JSONで送って、JSONで返すみたいな。ちなみに、サーバー間同士でもJSONでやり取り可能みたいですね。
データをブラウザとサーバー間でやり取りする際には避けて通ることができないと思われるため、シリアライズ、デシリアライズを如何にシームレスに行うことができるかがユーザビリティの向上に影響しそうですね。
JSONはテキスト形式のデータであるため、バイナリ形式のデータに比べるとどうしても「シリアライズ」「デシリアライズ」に時間を取られてしまうようです。
ちなみに、面白法人カヤックさんで開発してらっしゃる方のブログで、
「Protocol Buffers」というものを知り、Qittaの tayama0324 - Qiita さんの記事で、
「MessagePack」 というものの存在を知りました。「FlatBuffers」というものも存在するようですね。
・汎用シリアライズ方法(MessagePack/Protocol Buffers/FlatBuffers) - sambaiz-net
速度にシビアなゲーム業界で利用されているC#などでは、「ZeroFormatter」なるものも存在するようですね。
・neue cc - ZeroFormatter - C#の最速かつ無限大高速な .NET, .NET Core, Unity用シリアライザー
⇧ 上記の「ZeroFormatter」を作成しているのは日本の方みたいですね。
「JsonUtility」なるものも存在すると。
「Thrift(Apache Thrift)」なるもの存在すると。
Apache Thrift(アパッチ スリフト)は、「スケーラブルな言語間サービス開発」のためにFacebookにて開発された遠隔手続き呼出し (RPC) フレームワークである。これはソフトウェアスタックとコード生成エンジンを組み合わせることで、C++、C#、Java、Perl、Python、PHP、Erlang、Rubyなどの言語間にて効率的かつシームレスに動作するサービスを開発することを可能とする。
これだけ様々なライブラリが出ているとは、時はまさにシリアライザー戦国時代...
JSONについても学習していかねばですね。