4D v16 R4 では 、 JSONオブジェクトを検証 できるようにオブジェクトコマンドを充実させました。 4D v16 R5 では、 JSONポインタのサポートを導入し、さらに進化させました。でも、JSONポインタとは何でしょうか?
データベースのレコードに各従業員の会社情報を保存しないように(代わりに会社レコードへのリンクを使用)、JSONドキュメントをさまざまな場所で再利用できるパーツで構成すると、非常に便利な場合があります。
たとえば、Webサイトでの注文を例にとると、顧客が配送先住所を入力し、請求先住所を同じに指定します。この場合、住所情報を重複して登録するのではなく、配送先住所を請求先住所への参照として定義することができる。
また、JSON形式で保存されたデフォルトのプロパティを含むテンプレートオブジェクトを定義し、プロパティの一部を別のJSONファイルに保存されている情報とマージするシナリオもあります。
サイクルを含むオブジェクト(すなわち、互いを含む2つのオブジェクト)は、JSONで文字列化することができません。JSONポインターは、JSONフォーマットとの互換性を保ちながら、循環参照を表現する方法です。
JSONポインタのコンセプト
JSONポインターは、同一または別のJSON文書内の特定のフィールドまたはキー値にアクセスするために使用できる文字列構文を定義した規格です。これは、”/”文字で区切られた文字列で構成されています。これらの文字列は、オブジェクトのキーまたは配列のインデックスを指定します。JSONポインターの構文は、RFC 6901で定義されています。
例えば、このオブジェクトは
{ "foo": {"$ref": "#/bar"}, "bar": "42" }
と解決することができます。
{ "foo": "42", "bar": "42" }
NEW COMMAND
この JSON resolve pointersコマンドは、パラメータとして渡されたオブジェクトにあるすべてのJSONポインタを、オプション設定(ある場合)と共に解析します。そして、成功ステータス、結果値、潜在的なエラーのリストを含むオブジェクトを返します。
いくつかの例…いつでも役に立ちます!
JSONポインタの動作について学ぶ(理解する)ために、データベースのデモ例をご覧ください。
デモに加えて、別の例も紹介します。$object 変数に次の内容が格納されているとします。
以下のようなコードを実行すると
$result:=JSON Resolve pointers($object)
trace
$object と$result の変数に表示される内容は次のとおりです。
$result はオブジェクトで、成功のステータスと返された値の両方を含んでいることに注意してください。もしエラーがあれば、それも含まれているはずです。