
XML vs 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. おわりのご挨拶と資料リンク集
〇年前の自分に一通りメモを残せたところで、今回は終わりとさせて頂きます。
記事の執筆にあたり、改めてデータフォーマットについて調べることとなりました。
その際お世話になった有難い資料を紹介致します。
それでは皆様、よき開発ライフをお送りください。
・進化するフォーマット|CSV、XML、JSON…データフォーマットの変遷について考える
・XMLとJSONの話(1) データフォーマットとしての比較