XML vs JSON

この記事の概要


対象者:初学者の方
内容:XMLとJSONを比べてます。

1.ご挨拶代わりの思い出話

浅春のみぎり、皆様いかがお過ごしでしょうか。
エンジニアの靱(うつぼ)です。

どっちかいうとサーバーサイド側の開発が好きです。バッチとかWebAPIとか嬉々として作ります(これは社内へのアピール)。
ところでWebAPIといえば、何が返ってくるものでしょうか。JSON?XML?それとももっと別の何か?
私は「大体JSONで返ってくるだろう」と思った矢先にXMLが返ってきて、右往左往した記憶があります。仕様書はちゃんと読もうね……
そんな当時の私に向けて、「それぞれ大体こんなかんじ」という覚書を残すことにしました。

2.XML

概要

「Extensible Markup Language」の略です。 生まれは1998年。WebAPIの通信フォーマットや、設定ファイルでもよくお目にかかれるフォーマットです。 HTMLと似た文法で記述することができるので、見た目は馴染み深いのではないでしょうか。

記述方法

<?xml version='1.0' encoding='utf-8'>
<great_writer>
	<writer name="芥川龍之介">
		<library_work>
			<title>羅生門</title>
			<published_year>1915</published_year>
		</library_work>
		<library_work>
			<title>鼻</title>
			<published_year>1916</published_year>
		</library_work>
	</writer>
	<writer name="森鴎外">
		<library_work>
			<title>雁</title>
			<published_year>1911</published_year>
		</library_work>
		<library_work>
			<title>高瀬舟</title>
			<published_year>1916</published_year>
		</library_work>
	</writer>
</great_writer>

ベースとなる書き方は以下の通り。

<要素名 属性名="属性値">内容</要素名>

要素名・属性名・属性値・内容すべて自由に指定することができます。
また、内容に要素をネストすることができます。
内容を記載しない場合は、HTMLのように開始タグ内で閉じることもできます。

<writer name="芥川龍之介" birthday="1892-03-01"/>

3.JSON

概要

「JavaScript Object Notation」の略でジェイソンと読みます。ホラー映画ではない
その名にもある通り元々はJavaScriptのオブジェクト構造をベースにして作成されました。
JavaScriptと名はつくものの、言語の垣根を越えて幅広く使用されています。

記述方法

{
    "name" : "芥川龍之介",
    "birth_year" : 1892
}

基本的な書き方は以下の通りです。

{ "key" : "value" }

{}で囲った中にkeyとvalueの組み合わせを記述していきます。 keyの引用符は必ずダブルクオーテーションである必要があります。 シングルクオーテーションや、引用符なしだと動作しません。

XMLと比べて随分シンプルなデータを書きましたが、ここから拡張していきます。

JSONには型の概念があります。
具体的には、以下の型を使用することができます。

  • 文字列
  • 数値
  • null
  • bool
  • オブジェクト
  • 配列

数値・null・boolの場合は引用符を取っ払います。
オブジェクト型とありますが、JSON内にJSONをネストすることができます。
これによって、XMLのように木のような構造を作ることもできます。

{
    "name" : "芥川龍之介",
    "birthday": {
        "year": 1892,
        "month": 3,
        "day": 1
    }
}

配列を使う場合は[]を使用します。

{
    "name" : "芥川龍之介",
    "titles": [
        "羅生門",
        "鼻",
        "歯車"
    ]
}

4.さて、どっち使おう。

それでは、比べていきましょう。

文字コード

JSONはRFC4627でUTF-8を使用することと取り決められています。
XMLはその点取り決めがない代わりに、データフォーマット内で文字コードを指定することができます。(サンプルデータ1行目に記載しています)
昨今ではUnicodeでJIS第3水準・JIS第4水準すべてサポートされています。そのため、UTF-8を使っていて然程困る場面はないと思います。(昨今といっても干支一周以上前ですが)

表現力

JSONはvalueに様々な変数型を使用することができます。
そのため、数値は数値として、boolはboolとして受け取ることができます。
一方XMLは全て文字列扱いとなります。その代わり、データを要素と属性の二種類で表現することができます。

処理速度

この点においてはJSONに軍配が上がります。
どちらも開始タグ・終了タグで内容を囲むフォーマットですが、タグの長さに違いがあります。
XMLのタグは最低でも3bite(閉じタグは最低4bite)あります。運用面を考えれば要素名を1bite文字1文字に統一することは難しいでしょう。ということで、実際にはもっと増えることになります。
その点、JSONのタグは「[]{}:”」のどれか1文字1biteと、非常にシンプルです。
その為、構文解析の処理がXMLよりも速くなります。

以上の比較をまとめると以下の通り。

文字コード:XMLの方が自由度が高いが、現状UTF-8で事足りる
表現力:XMLは情報詰め込める。JSONは型の情報があるからプログラムに扱わせるのが楽
処理速度:JSONの方が高速

更に業務上での使用用途も加え、今のところこう解釈しています。

  • JSONはフォーマットがシンプルだから、仕様擦り合わせのコストが低い。処理が速いのもあって、WebAPIをはじめ他のシステムとのやり取りに便利。
  • 更新頻度の低いファイルではXML便利。作りたい処理に合わせて柔軟に記述できる。

5.おわりのご挨拶と資料リンク集

〇年前の自分に一通りメモを残せたところで、今回は終わりとさせて頂きます。
記事の執筆にあたり、改めてデータフォーマットについて調べることとなりました。
その際お世話になった有難い資料を紹介致します。
それでは皆様、よき開発ライフをお送りください。

関連記事

プロジェクトストーリー

技術

コメント

この記事へのコメントはありません。

カテゴリー

TOP
TOP