JSON について

JSON for Modern C++ - Niels Lohmannnlohmann-json ライブラリを利用しています。


データフォーマット

JSON はファイルの場合 UTF-8 形式で保存されたテキストデータですが、特定のデータ記述形式に沿って内容が書かれています。

JSON の登場以前にもデータ交換用のデータフォーマットとしては CSV や XML がありました。 CSV は仕様が曖昧で統一規格が無くデータの可読性も悪い、XML はマークアップ言語を駆使した記述は統一的で自由度も高い、けれどデータをタグで括る方式は構文解釈に時間がかかりデータ量も多くなるなどの欠点があります。

JSON はまず可読性が高い、無駄な情報が少なくデータ量自体も小さくなる。扱えるデータ型も CSV より多く、文字列、数値、真偽値、null に加えてデータ構造型も配列とオブジェクトが扱えます。


比較

Animal Sounds Legs
Cat Meow 4
Dog Woof 4
Owl hoo-h’HOO-hoo-hoo 2

上記テーブルを CSV、XML、JSON でそれぞれ記述してみます。


JSON

  {
    "ANIMAL":["Cat","Dog","Owl"],
    "SOUNDS":["Meow","Woof","hoo-h’HOO-hoo-hoo"],
    "LEGS":  [4,4,2]
}
  

XML はマークアップ言語なので仕方ない部分もありますが、小さなデータの場合 CSV でも足りるけど JSON は効率的な記述で CSV では表現できなかったデータ構造型についても自然に記述できています。

「動物」、「鳴き声」、「足の数」というキーワードに対して配列型で三種類のデータが入り、

  • 動物 = 猫犬梟
  • 鳴き声 = ナー,ウー,ホーぅホホぅホーホー(迫真)
  • 足の数4, 4, 2

これを辞書型のデータ構造にパースして C++ で利用できるようにするのが nlohmann/json ライブラリの役割です。