簡単な仕様だけど、「エスケープの趣味が悪い」という事情で嫌われるかも。
- エスケープ文字は ~(チルダ)、チルダ+番号1文字でエスケープシーケンス。
- ~0 は チルダ自身
- ~1 は スラッシュ
- 特殊な意味を持つのはスラッシュのみ。
- 自然数値を解釈できる文字列は自然数インデックスとみなす。
- その他は文字列でプロパティ名とみなす。
- 自然数インデックスまたはプロパティ名文字列で構造にアクセスする。
一方、JSONパスだと:
- ルートは $ で表す。
- 原則は、ブラケット内のインデックス番号または文字列
- 文字列が名前のときは、[名前] と書いてもよい。
- さらに、.名前 でもよい。
- 文字列をキーとするので、エスケープは文字列のルールに従う。
どう考えてもJSONパスが便利。
JSONポインター相当のJSONパスのサブセットは、JSONパス・ポインター と呼ぶか。JSONパスとのセマンティクスの違いは、単位値またはundefinedを返すこと。
次の約束でいいかな。
- URL#/... ならJSONポインター
- URL#$... ならJSONパス・ポインター
JSONパス・ポインターは気持ちよく書ける。