TECH MEDIA

テックメディア


ノウハウ
ブログ

XML vs JSON

JSONXMLその他技術
目次
  1. 01|ご挨拶代わりの思い出話
  2. 02|XML
  3. 03|JSON
  4. 04|さて、どっち使おう。
  5. 05|おわりのご挨拶と資料リンク集

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) データフォーマットとしての比較

RECRUIT 採用情報

「eビジネスに関わる全ての人を幸せにする」
私達とともに新たな時代をつくりませんか?