| 4D v18JSON Resolve pointers | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v18
 JSON Resolve pointers 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JSON Resolve pointers ( object {; options} ) -> 戻り値 | ||||||||
| 引数 | 型 | 説明 | ||||||
| object | Object |   | 解決するJSONポインターを含んだオブジェクト型 | |||||
|   | 解決したJSONポインターを含んだオブジェクト型(結果がオブジェクト型の場合のみ) | |||||||
| options | Object |   | ポインター解決のオプション | |||||
| 戻り値 | Object |   | 処理の結果を含んだオブジェクト型 | |||||
JSON Resolve pointers コマンドは、object 引数内にある全てのJSON ポインターを、options 引数で指定した設定(あれば)に基づいて、解決します。
JSON ポインターは、以下のような場合に特に有用です:
object 引数には、解決すべきJSON ポインターを含んだオブジェクト型を渡します(JSON ポインターシンタックスについての詳細な情報については、以下のJSON ポインターを定義する の段落を参照してください)。
注: ソースとなるobject 引数は、コマンド実行後更新され、ポインター解決の結果が含まれます(ただし結果がオブジェクト型でない場合を除きます、以下参照)。オリジナルのobject 引数をそのまま残しておきたい場合には、事前にOB Copy コマンドを使用することを検討して下さい。
オプションとして、options 引数にはポインターを解決するときに使用する特定のプロパティを格納したオブジェクト型を渡すことができます。以下のプロパティがサポートされています:
| プロパティ | 値の型 | 詳細 | 
| rootFolder | 文字列 | object 引数内の相対ポインターを解決する際に使用するフォルダーへの(標準の4D シンタックスを使用した)絶対パス。デフォルトのフォルダーはデータベースのResources フォルダーとなっています。 | 
| merge | ブール | オブジェクトをポインターオブジェクトに一部併合する(true)か、完全に置き換えるか(false)を指定します。デフォルトはfalse  です。  | 
コマンドが実行されたあと、結果は以下のようになります:
どのような場合においても、コマンドは以下のプロパティを格納したオブジェクト型を返します:
| プロパティ | 値の型 | 詳細 | 
| value | 任意 | object 引数を処理したコマンドの結果。結果がオブジェクト型の場合には、中身は出力のobject 引数と同じになります。 | 
| success | ブール | 全てのポインターが正常に解決されていた場合にはtrue。 | 
| errors | コレクション | エラーのコレクション(あれば) | 
| errors[].code | 数値 | エラーコード | 
| errors[].message | 文字列 | エラーメッセージ | 
| errors[].pointerURI | 文字列 | ポインター値 | 
| errors[].referredPath | 文字列 | ドキュメントのフルパス | 
JSON ポインターとは、JSON ドキュメント全体の中にある特定のフィールドあるいはキー値へとアクセスするのに使用することができる文字列シンタックスを定義する規格です。この規格はRFC 6901 において説明されています。
JSON ポインターは、厳密な話をすると、'/'によって分割される部分から構成される文字列です。JSON ポインターは通常、ポインターが解決されるドキュメントを指定するURI内で見つけることができます。URI内でフラグメント文字"#"を使用することでJSON ポインターを指定しています。習慣に則り、JSON ポインターを格納しているURIは、"$ref"と名付けられたJSON オブジェクトプロパティ内にあります。
{
   "$ref":<path>#<json_pointer>
}注: 4D は存在しない配列要素への参照としての"-" 文字はサポートしていません。
JSON ポインターは再帰的に解決されます。これはつまりポインターが解決されたドキュメント内にポインターが更に含まれていた場合、それもまた再帰的に解決され、全てのポインターが解決されるまで繰り返されるということです。このコンテキストにおいては、JSON ポインターURI内のファイルパスは、すべて相対パスあるいは絶対パスのどちらも可能です。パスは区切り文字として'/' を使用し、以下の方法で解決されなければなりません:
注:
この基本的な例題では、どのようにしてオブジェクト型の中でJSON ポインターを設定して置き換えるかを考えます:
  // 何らかの値を持ったオブジェクト型を作成
 C_OBJECT($o)
 $o:=New object("value";42)
 
  // JSON ポインターオブジェクトを作成
 C_OBJECT($ref)
 $ref:=New object("$ref";"#/value")
 
  // JSON ポインターオブジェクトをプロパティとして追加
 $o.myJSONPointer:=$ref
 
  // 全体を解決して、ポインターが解決されたことを確認する
 C_OBJECT($result)
 $options:=New object("rootFolder";Get 4D folder(Current resources folder);"merge";True)
 $result:=JSON Resolve pointers($o;$options)
 If($result.success)
    ALERT(JSON Stringify($result.value))
  //{"value":42,"myJSONPointer":42}
 Else
    ALERT(JSON Stringify($result.errors))
 End if以下の($oMyConfig という名前の)JSON オブジェクト内において、請求先住所("billingAddress")を送付先住所("shippingAddress")として再使用したい場合を考えます:
{
    "lastname": "Doe",
    "firstname": "John",
    "billingAddress": { 
        "street": "95 S. Market Street",
        "city": "San Jose",
        "state": "California" 
    },
    "shippingAddress": { "$ref": "#/billingAddress" }
}以下のコードを実行すると:
 $oResult:=JSON Resolve pointers($oMyConfig)... 以下のオブジェクトが返されます:
{
    "success": true,
    "value": {
        "lastname": "Doe",
        "firstname": "John",
        "billingAddress": {
            "street": "95 S. Market Street",
            "city": "San Jose",
            "state": "California" 
        },
        "shippingAddress": {
            "street": "95 S. Market Street",
            "city": "San Jose",
            "state": "California" 
        }
    }
}この例題では、"merge" オプションの効果を紹介しています。デフォルトのファイルに基づいてユーザーの権限を編集したい場合を考えます。
{
    "rights": { 
        "$ref": "defaultSettings.json#/defaultRights",
        "delete": true,
        "id": 456
    }
}defaultSettings.json ファイルの中身は以下のようになっています:
{
    "defaultRights":
    {
        "edit": true,
        "add": false,
        "delete": false
    }
}以下のコードを実行すると:
 C_OBJECT($options)
 $options:=New object("merge";False) //中身を完全に置き換える
 $oResult:=JSON Resolve pointers($oMyConfig;$options)... 結果の値はdefaultSettings.json ファイルの中身そのものと完全に同じです:
{
    "success": true,
    "value": {
        "rights": {
            "edit": true,
            "add": false,
            "delete": false
        }
    }
}一方、以下のコードを実行すると:
 C_OBJECT($options)
 $options:=New object("merge";True) //中身を一部併合する
 $oResult:=JSON Resolve pointers($oMyConfig;$options)... 結果の値は、元のオブジェクトを一部変更した値になります:
{
    "success": true,
    "value": {
        "rights": {
            "edit": true,
            "add": false,
            "delete": true,
            "id": 456
        }
    }
}
	プロダクト: 4D
	テーマ: JSON
	番号: 
        1478
        
        
        
	
	初出: 4D v16 R5
	
	
	
	
	
	
	
	
	
	
	ランゲージリファレンス ( 4D v18)
	
	
	
	
	
 コメントを追加
コメントを追加