Column (No. 4)

[付録] csvとjson

 csvファイルは幅広く利用されている電子データの形式です。csv(Comma-Separated Values)は、テキストベースの形式で、表形式のデータを表現するのに便利です。以下の様に長所も短所もあります。

  • シンプルな形式
    csvは通常使っている文字が並んでいるだけと言う非常にシンプルな形式であり、テキストエディタやExcel等の表計算ソフトなど、さまざまなツールで簡単に作成および編集することができます
  • それなりの柔軟性
    さまざまなデータ形式を格納できるため、さまざまな用途に適しています。テキスト、数値、日付、時間など、文字になるものは何でもデータを含むことができます。論理値など文字ではないものも、例えば”有”と”無”などの文字で代替えする事で使う事ができます。但し、複数の値を持つデータや構造を持つデータの表現は別の取り決めが必要です。例えば、「人」に対する属性として「あだ名」を考えると複数のあだ名があるの人がいますが、この幾つあるか分からない情報を表現する場合には工夫が必要です。また、住所の様に都道府県・市区町村・町字・それ以下などの構造を持つ場合は項目を分けるかまとめて一つの項目に押し込む必要があります。
  • それなりの相互運用性
    csvファイルは、異なるシステムやプラットフォーム間でデータを共有するための標準的な手段として広く使用されています。多くのソフトウェアやプログラミング言語は、csvファイルを読み書きするためのライブラリや機能を提供しています。但し、登録されている値が数値なのか文字列なのかは指定で決まません。例えば、”0123″は数値の123なのか0123という文字列なのかを区別する事が出来ませんし、”24-03-15″は日付の2024年3月15日なのか、単なる文字列なのかも区別がつきません。
  • コードが多様
    コードにはUNICODE以外も多様なコードの利用が可能です。これは利点であると同時にデータを交換する時には必ずコードを取り決める必要があるという欠点でもあります
  • Excel等の表計算ソフトとの親和性
    表計算ソフトは二次元の表の形式なので、表計算ソフトと親和性が高く、表計算ソフトを使ってグラフを作るなどが可能です。但し、前記の様にcsvでは数字で出来ている文字列が数値なのか文字列なのかを区別する事が出来ませんので、表計算ソフトで読み込むと先頭のゼロ(“0”)が勝手に削除されてしまったりします
  • 仕様変更に弱い
    csvは項目を追加した場合の考え方を規定していません。例えば項目が増えた場合、項目の位置がずれてしまいますが、情報の受け手は項目名で処理していれば良いのですが、項目の番号で処理していると不具合が発生します
  • 一括でのデータ交換に向く
    csvは複数の行を一括して受け渡すのに向いています。逆に言うと、リアルタイムに一件ずつの行をやり取りするには(出来ない事はありませんが)面倒です
  • ファイル数が多くなる傾向
    既に記述した様にcsvは複数の値を持つ情報を表現しにくいです。これを打破するには、複数の値を持つ情報を別のcsvファイルに格納する方法がありますが、csv自体は複数のファイルを一括して取り扱う標準ではありませんので、結果的にファイル数が増える傾向があります。逆にファイル数を少なくしようとすると、表現できる情報が限定されます

 これに対し、jsonはインタネット上で情報をやりとりするために生まれましたので、csvの欠点を補うような特性があります。尚、jsonの例については、本サイトの「共通データ仕様の基礎知識」をご覧ください

  • シンプルな形式
    jsonはcsv同様に通常使っている文字が並んでいるだけと言う非常にシンプルな形式であり、テキストエディタなど、さまざまなツールで簡単に作成および編集することができます。自由な表現を可能とするデータの形式としてはXML (eXtensible Markup Language) が有名ですが、XMLは複雑で文字数が多くなる傾向があり、jsonは簡略化・軽量化したものも言えます
  • 柔軟性
    さまざまなデータ形式を格納できるため、さまざまな用途に適しています。テキスト、数値、日付、時間など、文字になるものだけでなく、複数の値を持つデータや構造を持つデータの表現も規定さています。また、論理値もそのまま格納できます。例えば幾つあるか分からない情報としては、「人」に対する属性として「あだ名」を考えると複数のあだ名があるの人がいますが、このを表現する場合の表現方法も規定されています。また、構造がある情報としては住所の様に都道府県・市区町村・町字・それ以下などの構造を持つ場合がありますが、住所というひとつの項目の中に複数の項目を定義して、それぞれ都道府県・市区町村・町字・それ以下をそれぞれ表現する事もできます
  • それなりの相互運用性
    異なるシステムやプラットフォーム間でデータを交換するための標準的な手段として広く使用されています。特にインタネット上で交換する手段としてはかなり幅広く使われています。csvファイル程ではありませんが、多くのソフトウェアやプログラミング言語は、jsonファイルを読み書きするためのライブラリや機能を提供しています。また、数字と文字列は明確に分けているので、0123が数値なのか文字列なのか迷う事はありません
  • コードが一つ
    コードにはUNICODEのutf-8を使います。このためコードを個々に取り決める必要はありません。この特性は、インタネットでのデータのやり取り、つまり相手が不特定多数という生い立ちに起因します。余談ですが、utf-8には本来BOMはありません。一部ソフトウェアではutf-8でもBOMを付ける場合があるので注意が必要です
  • Excel等の表計算ソフトには変換ソフトでcsvに変換
    表計算ソフトは二次元の表の形式である一方、jsonは非常に自由な表現を可能にしているので一般的にはcsvからjsonへの変換は可能である一方、jsonからcsvへの変換は出来ません。但し、本協議会の共通データ仕様は出来る限り二次元の範疇で定義しているので、変換は多くの項目で可能です。変換についてはケーススタディで例示しています
  • 仕様変更に強い
    csvでは一行目に項目名を記述ししますので、運用途中に項目を追加する場合は過去にさかのぼって項目を追加しなおす必要があります。これに対しjsonは、各データ全てに項目名が埋め込まれていますから、運用途中に項目を追加しても過去のデータを気にする必要はありません。また、jsonは項目に順番はありませんし、情報を受け取った側は知らない項目は無視するという規定もありますので、仕様が多少異なっても情報のやり取りが可能です。この特性はインタネットの様な事前に調整が難しい環境では重要な特徴です
  • 一件毎のデータ交換に向く
    csvは複数の行を一括して受け渡すのに向いていましたが、jsonは一件いっけんのデータをリアルタイムに受け渡すのに向いています。このため、スマホのアプリなど、細かなデータを多数回やりとりする処理に向いています
  • ファイルがまとめられる
    既に記述した様にjsonは複数の値がある情報も表現可能です。csvでこれらに対応するためにはファイルを分ける必要があるためファイル数が多くなってしまったり、ファイル間の整合を保持する事が困難でした。jsonはこの様な事が起きないため、ファイル数が増えてしまう事を避ける事ができます

以上の事から、以下の事が言えます。

  • csv
    データの送り手と受け手が一対一で事前に調整のうえ、必要なデータをひとまとめにして受け渡す局面に向いている。対象のプログラムは表計算ソフトやRDBMSなど
  • json
    不特定多数の参加者間で、一件ずつや多件数まとめて自在にやり取りする処理に向いている。対象のプログラムは、スマホやPCのアプリ、自動制御、スマートシティなど