JSONは便利だ。
文字も書けるし数字も書ける。配列も書けるし構造体も書ける。
ここがちょっとなあ、と思うところもある。
- 数字が 53bit まで
- 行末にコンマがいるし、次に継続するものがない場合はコンマがあってはダメ
- コメントが書けなさそう
53bit までしかないので、64bit値になる可能性がある場合は文字列にしてデコード側で変換している。
コンマが必要だったり不要だったりなのは面倒なだけなのだが、ちょっとしたJSONなのでライブラリなど無しで作ろうとした場合、コンマを出力するかどうかを判定しながらになるのがもどかしい。
まあ、コンマがあるおかげで1行で書いたりもできるのだが、設定ファイルのように人間が読み書きする前提だったら改行を末尾としたり、インデントでブロックと見なしたりすればいいやんという気持ちにもなってしまう。
あと、コメントが書きたいことがしばしばあるのだが、そういうのはない。
データ構造だから、まあ仕方ないよね。
だからかどうか知らないが YAML もよく使われる。
私の場合は docker compose の設定くらいしかお世話になっていないのだが、
いま(2024/01/14)の時点で、YAML仕様はバージョン1.2、リビジョン1.2.2(2021/10/01)が最新だそうだ。
ページを開いて、スクロールバーの小ささに驚く。こんなに量が多いのか......
docker compose の YAMLファイルくらいしか覚えがなかったので、もうちょっとさらっとした仕様かと思っていた。
BMF みたいなのを読むのもだるいので、こういうときは cheat sheet で検索だ。
たくさんあるので、見たいものを見ると良いだろう。
私はあまり難しいことを書きたいわけでもないので、
- 数値の bit数については記述がないので制限はなさそう。
- 文字列だからダブルクォーテーションで囲む必要があるという訳ではない。ただ数字だけ書くと数値として扱われるので、書く人が使い分ける。
- 数値は10進数以外に8進数(0o)や16進数(0x)が使えるようだ(2.4. Tags)
- 改行コードとしてはいつもの3種(LF, CR, CR/LF)が使える (5.4. Line Break Characters)
- コメントは # 始まり (6.6. Comments)
- 1項目は key:value のような感じ。
- インデントは行の先頭からのスペースで表す。がTAB文字はダメ (6.1. Indentation Spaces)
- 配列的なものはハイフンを頭に付けて、インデントを同じ高さにして並べる
- "key:" で改行して、その下にインデントを1つ分付けて各行に並べる
- ハイフンではなく同じインデントの高さで並べると、JSONのObjectのような扱いになる
このくらい知っておけば普段使いには困らないだろう。
docker compose の yaml でよくある「-」始まりは配列だし、インデントを付けているのも見やすさというよりもYAMLフォーマットの仕様だからということになる。
ここで "sectets" の下が key:value なのに 「-」がついていた。これは "source"から"mode"までが1つのオブジェクトで、それが複数あってもよいけどここでは1つしかないですよ、ということらしい。YAMLをJSONに変換するオンラインコンバーターのサイトがあったので試してみた。
サンプル
items: - name: hello value: 10 - name: world value: 20
JSON変換
{ "items": [ { "name": "hello", "value": 10 }, { "name": "world", "value": 20 } ] }
うむ。
「-」を付けることを考えると、インデントはスペース2つ分にするのが扱いやすいか。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。