JSON
JavaScript Object Notation
JSON について
JSON for Modern C++ - Niels Lohmann の nlohmann-json ライブラリを利用しています。
Modern C++ は C++11 以降の近代化された C++ 言語のこと。C 言語を拡張した派生言語として進化した C++ でしたが、時代に合わせ更なる進化を求めた結果 Modern C++ として生まれ変わりました。Modern 以前と以後でプログラムの書き方が異なり、3 年ごとに新規格が生まれ C++11、C++14、C++17、C++20、C++23 とこれら全てが Modern C++ です。
Modern C++ で書かれた JSON ライブラリの中でも人気が高い nlohmann/json です。近年の流行でもあるヘッダーオンリーなオープンソースライブラリ、多機能だが安定性と実績があり実際使ってみれば大変便利。処理速度が遅いことについては常に言及されてますが、利便性が勝ります。
データフォーマット
JSON はファイルの場合
UTF-8
形式で保存されたテキストデータですが、特定のデータ記述形式に沿って内容が書かれています。
JSON の登場以前にもデータ交換用のデータフォーマットとしては CSV や XML がありました。 CSV は仕様が曖昧で統一規格が無くデータの可読性も悪い、XML はマークアップ言語を駆使した記述は統一的で自由度も高い、けれどデータをタグで括る方式は構文解釈に時間がかかりデータ量も多くなるなどの欠点があります。
JSON はまず可読性が高い、無駄な情報が少なく XML よりデータ量も小さくなる。扱えるデータ型も CSV より多く、文字列、数値、真偽値、null に加えてデータ構造型も配列とオブジェクトが扱えます。
比較
Animals | Sounds | Legs |
---|---|---|
Cat | Meow | 4 |
Dog | Woof | 4 |
Owl | hoo-h’HOO-hoo-hoo | 2 |
上記テーブルを CSV、XML、JSON でそれぞれ記述してみます。
Animals,Sounds,Legs
Cat,Meow,4
Dog,Woof,4
Owl,hoo-h'HOO-hoo-hoo,2
<?xml version="1.0" encoding="utf-8"?>
<Animals>
<Animal Type="Cat" Sounds="Meow" Legs="4" />
<Animal Type="Dog" Sounds="Woof" Legs="4" />
<Animal Type="Owl" Sounds="hoo-h'HOO-hoo-hoo" Legs="2" />
</Animals>
{
"ANIMALS":["Cat", "Dog", "Owl"],
"SOUNDS":["Meow","Woof","hoo-h’HOO-hoo-hoo"],
"LEGS": [4,4,2]
}
小さなデータの場合 CSV でも足りるけど、JSON は CSV では表現できなかったデータ構造型も記述できます。
XML はデータの各エンティティを個別のタグで明確に区別することが重要で、XML の記述の冗長性にはデータの一貫性と可読性を高める目的があるために省くことはできず、結果的にデータ量が増えていきます。
「動物」「音」「足の本数」というキーワードに対して、3 つのデータセットが配列に含まれています:
- 動物 = 猫,犬,梟
- 鳴き声 = ナー,ウー,ホーぅホホぅホーホー(迫真)
- 足の数 =
4
,4
,2
これを辞書型のデータ構造にパースして C++ で利用できるようにするのが nlohmann/json ライブラリの役割です。
関連
- JSON Pointer
- Action
- Create New Blank JSON
- Load from a File (TEXT)
- Save to a File
- Cre. Arr: Data Auto Fill
- Cre. Array: Boolean
- Cre. Arr. RGX Ex.Subm.
- Cre. Arr. RGX Pa.Subm.
- Cre. 2D-Arr: Oi Info
- Set Targeted JSON Pointer
- Targeted Array :: Overwrite > Set the Val As Bool
- Targeted Array :: push_back String
- Create New 2D-Array with Tgt Oi's Xy Coords
- Create New 2D-Array with Pursuer Oi's Xy Coords
- Create New 1D-Array with Mvt Tgt Oi FixVal
- Create New 1D-Array with Mvt Pursuer Oi FixVal
- Targeted JSON Pointer :: Batch Assignment for Oi Alt Values[n]
- Targeted JSON Pointer :: Batch Assignment for Oi Alt String[n]
- Targeted JSON Pointer :: Batch Assignment for Oi Flag[n]
- JSON Pointer :: OverWrite with a Boolean
- Overwrite with Sequential (2D-Array Only)
- Condition
- Expression