gorogoronyan FC2

データフォーマット: 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 は欠点も多いので、 代わってよりお手軽に扱える JSON が多用されるようになりました。

番外・・・

・主観的、脳内妄想図

  古代ペルシャ語  Java, XML 
  古代アラビア語  JavaScript, JSON 

関連

inserted by FC2 system