【何が違う?】データ形式(CSV, XML, JSON)の特徴を知ろう

プログラミングの勉強をしている時や開発をしている時にCSV, XML, JSONという単語を目にしたことはありますか?
これらはデータを扱う時や、何らかのソフトの設定を変更する際に見たことがあるかもしれません。
しかし、いまいちどういう意味や違いを持つのか分からない方もいるのではないでしょうか。

今回は、

  • CSV, XML, JSONとはどういうものなのか
  • それぞれの特徴は何か
  • どのように記述するのか

この3つについて解説したいと思います。

目次

さまざまなデータ形式

データを記述する方法は実に様々です。
CSV, XML, JSONは、全てシンプルなテキストベースのデータ形式です。
より砕いて言えば、データを記述するためのルールのようなものです。
これらの形式を使い、コンピュータ同士のやり取りや特にインターネットを介したデータの受け渡しを行います。
それぞれの形式についてより詳しく解説をしていきます。

CSV形式

一番知られており、理解しやすい形式がこのCSV(シー・エス・ブイ)だと思います。
CSVは’Comma-Separated Values’(コンマ・セパレイテッド・バリューズ)の頭文字です。
その名の通りコンマ(”,”)で区切られています。
この方式は複雑ではないので、直感的にデータの中身を把握しやすいです。
また、MicrosoftのExcelやGoogle Spread Sheetと親和性の良いのがこのファイル形式です。

XML形式

Extensible Markup Language(エクステンシブル・マークアップ・ラングイッジ)と言われ、XML(エックス・エム・エル)と略されます。
XMLはHTMLの記述方法に似ており、タグと呼ばれるもの(例えば\\のようなものです)によってデータを囲み、更にデータを入れて入れ子構造にすることができます。
人が見るのには直感的に理解しづらく複雑ですが、CSVよりも様々なデータを記述することができます。
また、Ajaxと呼ばれる機能が普及したことにより、クライアント側でも処理が容易であるため、XMLでの記述されることは多いです。

Ajaxとは

Asynchronous JavaScript, XMLの頭文字です。
Asynchronousとは「非同期で」という意味で、JavaScriptとXMLを使って非同期にサーバとの間の通信を行うものです。
非同期通信とはページ遷移を必要としない通信のことです。
通常の同期通信の場合、例えばリンク先に飛ぶなどを行うと、一回画面が真っ白くなった後に新しいページが表示されます。


しかし非同期通信の場合は、このページ遷移が必要ではありません。
内部的にXMLとJavaScriptが通信を行ってくれることによって、そのページのままページを更新することができます。
この機能を利用したサービスとして、Google mapがあります。
このサービスは、ページ遷移をせずに新しい地域を表示することが可能です。

Google map: https://www.google.com/maps/?hl=ja

JSON形式

JSON(ジェーソン)とはJavaScript Object Notation(ジャバスクリプト・オブジェクト・ノテイション)の頭文字です。
このデータは辞書型と呼ばれる、一対一対応のような記述方式をとっています。
また、XMLよりもデータの記述量が少ないので、読み込みが速いと言われています。

この形式の特徴は、その名前からも分かるようにJavaScriptとの親和性の高さが挙げられます。
JSON は JavaScript のオブジェクトで構成されているため、そのまま JavaScript で記述したプログラムで扱うことができます。

それぞれの形式の特徴と関係性

それぞれの使い分け方は簡単に言うと、XMLやJSONはリスト内のリストを作るようなイメージで使用され、CSVはテーブルデータのために使用されます。
詳しくは”XML, JSON, CSVでデータを記述してみよう”で説明します。
まずはそれぞれの特徴と関係性を説明します。

XML ≒ JSON

XMLとJSONには相互変換できるライブラリーが多数存在します。
ただし、これらを完璧に変換できるものはありません。

XML/JSON > CSV

XML、JSONはCSVよりも複雑なデータを扱うことができます。
例えば、XMLやJSONはCSVファイルが保存できるテーブル型のデータを保存できます。
ただし、記述はCSVよりも複雑になります。

改行の有無

CSVではデータの列ごとに改行が必要ですが、JSONとXMLではその必要がありません。
私たちは改行がある方が読みやすいですが、コンピューターの場合は改行がない方が読み込みやすいです。
この改行が必要ないのは読み込みやすさを上げるには非常に重要な問題になっています。

CSV, XML, JSONでデータを記述してみよう

では、実際にテーブル型のデータをそれぞれの形式で記述してみたいと思います。
その前にテーブル型のデータとは何でしょうか。
簡単に説明しておきたいと思います。

テーブル型のデータとは

テーブル型は縦の行(record)と横の列(column)からなる二次元の「表」であり、固定された列に対して、任意の数の行が追加される構造になっています。

列\行

今回は以下のようなデータをそれぞれの方式で記述しています。

IDNameCountry
111MikeUSA
222NancyCanada

このテーブルは、行にID、Name、Countryを指定し、それぞれについて要素を入れた名簿のようなものです。
このデータをそれぞれの形式で書くとどのようになるのでしょうか。

CSVの場合

先にも紹介したように、この形式は人が見てどのようなデータなのかが分かりやすいです。
特にテーブルは、上の表とかなり似ています。

ID, Name, Country
111, Mike, USA
222, Nancy, Canada

ちなみにこの形式をExcelで開くと、それぞれの要素がセル内に入った状態で表示されます。

XMLの場合

上のCSVで記述したデータをXMLで記述した場合、次のようになります。

<?xml version='1.0' encoding='utf-8'>
<root>
    <employee>
        <employ>
            <ID>111</ID>
            <Name>Mike</Name>
            <Country>USA</Country>         
        </employ>
        <employ>
            <ID>222</ID>
            <Name>Nancy</Name>
            <Country>Canada</Country>
        </employ>
    </employee>    
</root>

内容は見てわかるようにHTMLに似ています。
この形式ではまず最初に、XMLのバージョンとエンコードを指定します。
そしてタグ<>でデータを囲んで記述します。よく見るとタグの中にタグが入っているのが分かると思います。
このように記述していくことで、より多くのデータを扱うことができます。

JSONの場合

最後にJSONで記述してみます。

[
    {'ID': '111', 'Name': 'Mike', 'Country': 'USA'},
    {'ID': '222', 'Name': 'Nancy', 'Country': 'Canada'}
]

1つの要素に対して1つのものを指定している形式をとっています。
このような記述は辞書にように1つ言葉に1つの意味が載っていることから、辞書型と呼ばれています。
見ての通り、XMLよりも記述量が少なく、人が見て分かりやすいのが見て取れると思います。

おまけ: PythonでXMLを記述してみよう

上記のデータは直接ファイルに書き込むことを想定していますが、プログラミング言語を使用してファイルを作成することができます。
ここでは一番複雑なXMLをPythonで記述するためのコードを記したいと思います。
Pythonでは標準でXMLを書くためのモジュールが存在します。

import xml.etree.ElmentTree as ET

root = ET.Element('root')
tree = ET.ElementTree(element=root)

employee = ET.SubElement(root, 'employee')

employ = ET.SubElement(employee, 'employ')
employ_id = ET.SubElement(employ, 'ID')
employ_id.text = '111'
employ_id = ET.SubElement(employ, 'Name')
employ_id.text = 'Mike'
employ_id = ET.SubElement(employ, 'Country')
employ_id.text = 'USA'

employ = ET.SubElement(employee, 'employ')
employ_id = ET.SubElement(employ, 'ID')
employ_id.text = '222'
employ_id = ET.SubElement(employ, 'Name')
employ_id.text = 'Nancy'
employ_id = ET.SubElement(employ, 'Country')
employ_id.text = 'Canada'

このコード自体は現時点で理解できる必要はないですが、このように書けるのかという事だけは頭の片隅に入れておいてください。

まとめ

今回はCSV, XML, JSONそれぞれのデータ形式とそれぞれの特徴や記述方法について説明しました。
自分で何かサービスやソフトウェアを作ろうといた時に、ここに出てきたものが必要になってくる場面があるかもしれません。
この記事を読んで理解を深めていただけると幸いです。

本気でプログラミングを身につけるならCodeShip

CodeShipは業界内で唯一「無償延長保証制度」によるスキル修得を保証しているプログラミングスクールです。
独学での挫折や未経験からでも、スタートアップベンチャーや日系・外資の大手WEB系企業まで幅広くエンジニアを輩出する教育実績を残しています。

勉強目的ごとに用意された6つの学習コース現役エンジニアキャリアコンサルタントがあなたの「開発スキル修得」と「キャリアプランニング」をサポートします

さらに、期間内であれば選択した以外のコースのカリキュラムを受講可能。
同じ値段で、頑張った分だけ勉強できる「勉強し放題」はCodeShipだけ。

まずはご自身のプログラミング学習やキャリアプランについて、無料個別相談会にてお気軽にご相談ください。


おすすめ記事