JSONとXMLの違いを見つけていました。どちらもシステム間のデータ交換のためのものですが、JSON と XML には大きな違いがあり、JSON は XML よりも軽量です。しかし、JSON が軽量であるという実際の理由を見つけることができません。JSON を軽量化する理由は??
私が見つけた 1 つの答えは、JSON には余分な xml マークアップがあまりないということです。それは実際にはどういう意味ですか. JSON が軽量である理由を説明するその他の理由はありますか?
JSON および XML ドキュメントの例を見たことがありますか?
JSON と XML はどちらも任意のデータツリーを表すために使用されますが、XML ははるかに冗長です。ツリー内のすべての要素には名前 (要素タイプ名) があり、要素は一致するタグのペアで囲む必要があります。対照的に、JSON は、Javascript に似た「ネストされた配列」タイプの表記法でツリーを表現します (実際、JSON ドキュメントは文字どおり Javascript として解析され、対応する配列が得られます)。
違いを見てみましょう。
要素は任意の数の属性で装飾でき、要素には自由なテキスト フローとさらにネストされた要素の混合コンテンツを含めることができるため、XML はもちろん意味的に豊富です。たとえば、次のスニペットを JSON として表現するのは面倒です。
<paragraph>
This is an entire paragraph of <emph>text</emph>. It is interspersed with
further, nested <emph>XML elements</emph>, as well as the occasional
<link href="http://stackoverflow.com/a/12346394/596781">hyperlink</link>.
</paragraph>
一方、dataに似たドキュメントは、JSON の方がはるかに単純です。これを想像してください:
<properties>
<property type="int" name="ID">123</property>
<property type="date" name="birthday">19700101</property>
<references>
<url>http://stackoverflow.com/a/12346394/596781</url>
<doi>something.made.up</doi>
</references>
</properties>
これは非常にコンパクトな JSON 配列になります。
2 つ目の考慮事項は、両方のフォーマットを取り巻くツールセットの量です。JSON ツールは主に JSON データの解析に関するものですが、W3C は、XSLT や XPATH など、体系的な方法で XML を操作するための非常に多くの準拠技術を開発してきました。
一言で言えば、非常に個人的な意見として、XML はドキュメントに関するものであり、JSON はデータに関するものであると言えます。XML は、大規模で構造化されたドキュメントではより自然で便利に感じられますが、JSON は多くの場合、データ セットを送信するためのよりシンプルで冗長でない形式です。
JSON 表記はより簡潔です。XML は終了タグでノード タイプを繰り返しますが、JSON はスタックを使用してクロージャー スコープを推測するだけです。私の知る限り、XML は名前空間をサポートしていますが、JSON はそうではありません。通常、XML スキーマには型情報が含まれますが、JSON でこれを行うことができない本質的な理由はありません。JSON の台頭は、実際に使用されるすべての点で XML と機能的に同等であるという事実に少なからず起因していることに注意する必要があります。XML は辞書圧縮に適しているため、LZW 圧縮が機能するようになるとすぐに違いはなくなります。
データモデルが異なります。ご自身で気づいたマークアップの欠如を除けば、JSON には次のような他のすべての XML 機能もありません。
したがって、データ自体が軽量になるだけでなく、データ モデルを実装するライブラリも軽量になります。これにより、非 JavaScript 言語での JSON のレンダリング、解析、処理が大幅に高速化されます。JavaScript の場合、JSON は実際の JavaScript コードであり、JavaScript パーサーが処理するのははるかに「軽量」であるため、これは非常に簡単です。
シンプルさ
XML は SGML より単純ですが、JSON は XML よりもはるかに単純です。JSON の文法ははるかに小さく、最新のプログラミング言語で使用されるデータ構造により直接的にマップされます。
拡張性
JSON は拡張可能である必要がないため、拡張可能ではありません。JSON はドキュメント マークアップ言語ではないため、JSON 内のデータを表すために新しいタグや属性を定義する必要はありません。
相互運用性
JSON には、XML と同じ相互運用性の可能性があります。
開放性
JSON は、少なくとも XML と同じくらいオープンです。おそらく、それは企業や政治の標準化の中心にないためです。
線形係数だけ小さいだけです。それは実際には小さくありません。圧縮されると、どちらの形式もほぼ同じ容量を使用します。
すでに XML を使用する必要があるプログラムは、JSON を許可しても単純になるわけではなく、より複雑になることに注意してください。古い標準を取り除かない限り、余分な標準は事態を複雑にするだけであり、XML がすぐになくなることはありません。
XML は、ドキュメントの概念に基づいて設計されました。JSON は単純なデータ構造に関するものでした。JSON は標準をあまり気にしません。つまり、スキーマがないため、移植性は XML の使用に熟練した人よりも難しい場合があります。通常、ReSTful サービスを使用する必要がある場合、理解するために「コードを読んでください」または「JSON データ自体を見てください」と言われます。つまり、暗黙の (そしてかなり頻繁に変化する) データ形式です。
どちらの形式も、本来の形式では、データのグラフではなくツリーしか表現できないという問題があります。どちらの形式も好きではありません。どちらも中途半端に見えます。オブジェクトのシリアライゼーションは、より多くの問題を解決します。
ここにはいくつかの要因があります。
(a) JSON データ モデルはより単純です。オブジェクトの種類が少なく、プロパティが少ないです。
(b) JSON データ モデルは、Javascript などの一般的なプログラミング言語で使用可能なデータ モデルに近いため、これらの言語を使用する場合に必要なデータ変換は少なくなります。
(c) JSON のシリアル化された構文は、XML の構文よりも冗長性が低くなります (冗長性が低くなります)。
もちろん、これらの違いは、JSON が XML とは異なる目的のために設計されたためです。