ネストしたデータも表現できるCSV
一般的なCSVはネストしたデータをうまく表現できません。
そこでネストしたデータを自然に表現できるようにCSVを拡張したデータ形式を考えました。
このデータ形式をCSVO(CSV for Object)と仮に名付けます。
概要を見ていきましょう。
ヘッダ
CSVではヘッダは必須ではありません。
ヘッダがある場合は1行目がヘッダであり、2行目からデータがはじまります。
こんな感じですね。
(※以降のサンプルでは見やすいように適宜空白を入れています。)
K1, K2, K3 R1V1, R1V2, R1V3 R2V1, R2V2, R2V3
1行目はヘッダ行です。
このデータをJSONで表すと以下のようになります。
[ {"K1": "R1V1", "K2": "R1V2", "K3": "R1V3"}, {"K1": "R2V1", "K2": "R2V2", "K3": "R2V3"} ]
このデータをCSVOでは以下のように書きます。
K1, K2, K3 R1V1, R1V2, R1V3 R2V1, R2V2, R2V3
CSVOではヘッダとデータの間には空行をはさみます。
あるいはカンマなどの区切り文字は残っていてもよいでしょう。
K1, K2, K3 ,, R1V1, R1V2, R1V3 R2V1, R2V2, R2V3
そしてヘッダは複数行になることができます。
そのことでネストが表現できるようになります。
ネストの表現
こんなデータから始めましょう。
K1, K2 V1, V2
JSONで表すとこうですね。
(以降ではすべてのサンプルにそのデータのJSON表現をつけます。)
[ { "K1": "V1", "K2": "V2" } ]
K2をネストさせてみましょう。
ネストが始まったらヘッダ行を増やして次の行に移動します。
K1, K2 , , K2-1, K2-2 V1, V2-1, V2-2
[ { "K1": "V1", "K2": { "K2-1": "V2-1", "K2-2": "V2-2", } } ]
ネストが終わったら元の行に戻ります。
K1, K2 , , K3 , K2-1, K2-2, V1, V2-1, V2-2, V3
[ { "K1": "V1", "K2": { "K2-1": "V2-1", "K2-2": "V2-2", }, "K3": "V3" } ]
配列の表現
配列も表現できるようにしましょう。
配列は「*」をキーの代わりに使います。
*, *, * V1, V2, V3
[ ["V1", "V2", "V3"] ]
こちらもネストできます。
K1 , , , * , , * , K1-1, K1-2, K1-1, K1-2 V1 , V2 , V3 , V4
[ { "K1": [ {"K1-1": "V1", "K1-2": "V2"}, {"K1-1": "V3", "K1-2": "V4"} ] } ]
これでいろんなデータが表現できますね。