データフォーマット: JSON と XML の比較
JSON と XML の比較
XML JSON データの型 文字列だけ 文字列, 数値型, 論理型を区別できる 値と配列の区別 できない できる
この話は HTML でも同様です。
XML は文字列データだけ扱う
XML の属性値や textContent はすべて文字列なので、 数値や論理型や配列などを区別することができません。
例: XML, HTMLのタグ <tag name="文字列データ">textContent 文字列データ</tag>
XML ファイルを読んだときに アプリケーション側で個別に解釈して処理することが必要になります。 XML を読むときには文字列を数値や論理型に変換するなど 面倒なコードを大量に書く話になりやすいです。
JSON は文字列型、数値型、論理型、配列、 オブジェクトの区別ができ、読み書きもとても単純です。
例: JSON { "keyString1": "abc", //文字列型のデータ "keyNumber1": 123, //数値型のデータ "keyBoolean1": true, //論理型のデータ "keyArray1": [ "abc", "123" ], //配列型のデータ "keyObject1": { //オブジェクト型のデータ "key1" : "value1", "key2" : 456 } }
XML は配列と 1つだけの値の区別ができない
例: 下のような XML があった場合
<myxml> <mydata> <element name="value1"/> </mydata> </myxml>
element が 1) 1つだけの値なのか、 2) 配列の最初の要素なのか、XML のテキストを見ただけでは区別できません。
下の XML なら多分、配列の要素だろうと推測できます。 でも、はっきりと定義されているわけではなく、 自動的に処理できるわけではありません。
<myxml> <mydata> <element name="value1"/> <element name="value2"/> </mydata> </myxml>
上のような違いは XML の DTD (Document Type Definition) の定義を見ると分かります。 でも、DTD もない XML を扱うときには面倒な話になりやすいです。
JSON の場合は、JSON テキストの内容を見ただけで 1つだけの値と配列の要素を厳密に区別でき、 自動的に処理することができます。 怪しげなドキュメント (?) や難解な DTD を眺める必要がありません。
XML から JSON へ
- XML は本格的に濃い業務用途向き。一般のお手軽向きではない。
XML はデータの構造も定義した DTD やデータの処理を行う XSLT を組み合わせないと真価を発揮しにくい。 難解で面倒な話になりやすい。 - XML は単純なデータを扱うときにはムダに大げさになりやすい。
単純なリストの数値データや単純なキー - プロパティのデータを扱う程度の話だと 面倒が多い割にメリットがない話になりやすい。 - 文字列, 数値型, 論理型を区別できないなどの欠点もある。
XML の欠点を補うためスキーマなどのツールもありますが、 面倒な道具を一式揃えて使い方も気長に調べる話になりやすいです。 ブラックボックスのライブラリでセキュリティトラブルを起こすなど 別の面倒も増やす話になることも・・・。
で、XML は欠点も多いので、 代わってよりお手軽に扱える JSON が多用されるようになりました。
番外・・・
・主観的、脳内妄想図 古代ペルシャ語 Java, XML 古代アラビア語 JavaScript, JSON