| 4D v18JSON Parse | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v18
 JSON Parse 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JSON Parse ( jsonString {; type}{; *} ) -> 戻り値 | ||||||||
| 引数 | 型 | 説明 | ||||||
| jsonString | 文字 |   | 解析したいJSON文字列 | |||||
| type | 倍長整数 |   | 値を変換したい型 | |||||
| * | 演算子 |   | 返された値がオブジェクトの場合、各プロパティの行の位置とオフセットを追加 | |||||
| 戻り値 | Mixed, Object |   | JSON文字列から取り出した値 | |||||
JSON Parseコマンドは、JSONフォーマットの文字列の中身を解析し、4Dのフィールドまた は変数へと保存可能な値を取り出します。このコマンドはJSONデータをデシリアライズします。つまり JSON Stringifyコマンドと逆の挙動をします。
jsonString 引数には、解析をしたいJSONフォーマットの文字列を渡します。この文字列が正しくフォーマットされていないと、解析はエラーを生成します。なので、JSON ParseをしようしてJSON文字列を評価することができます。
注: ポインターを使用した場合、JSON Parseを使用する前に JSON Stringify コマンドを使用する必要があります。
type 引数を省略した場合、結果を保存するのに使用する変数またはフィールドが定義されていれば、4Dは自動的に、取得した値をその型へと変換します。そうでない場合は4Dは型を推測します。type 引数を渡す事によって変換する型を強制的に指定することもできます。渡す場合は、 Field and Variable Typesテーマ内にある以下の定数のどれか一つを渡して下さい。
| 定数 | 型 | 値 | 
| Is Boolean | 倍長整数 | 6 | 
| Is collection | 倍長整数 | 42 | 
| Is date | 倍長整数 | 4 | 
| Is longint | 倍長整数 | 9 | 
| Is object | 倍長整数 | 38 | 
| Is real | 倍長整数 | 1 | 
| Is text | 倍長整数 | 2 | 
| Is time | 倍長整数 | 11 | 
注:
__symbols:{//オブジェクト詳細
   myAtt.mySubAtt...:{ //プロパティパス
      line:10, //プロパティの行番号
      offset:35 //プロパティの、行の先頭からのオフセット
      }
   }注: 返された値がtype 引数で指定した型と異なる場合、 * 引数は無視されます。
単純な変換の例:
 C_REAL($r)
 $r:=JSON Parse("42.17") //$r = 42,17 (Real)
 
 C_LONGINT($el)
 $el:=JSON Parse("120.13";Is longint) //$el=120
 
 C_TEXT($t)
 $t:=JSON Parse("\"Year 42\"";Is text) // $t="Year 42" (text)
 
 C_OBJECT($o)
 $o:=JSON Parse("{\"name\":\"john\"}")
  // $o = {"name":"john"} (4D object)
 
 C_BOOLEAN($b)
 $b:=JSON Parse("{\"manager\":true}";Is Boolean) // $b=true
 
 C_TIME($h)
 $h:=JSON Parse("5120";Is time) //$h=01:25:20日付型のデータの変換の例:
 $test:=JSON Parse("\"1990-12-25T12:00:00Z\"")
  // $test="1990-12-25T12:00:00Z"
 C_DATE($date;$date2;$date3)
 $date:=JSON Parse("\"2008-01-01T12:00:00Z\"";Is date)
  //$date=01/01/08
 $date2:=JSON Parse("\"2017-07-13T23:00:00.000Z\"";Is date)
  //$date2=14/07/17 (Paris time zone)
 SET DATABASE PARAMETER(Dates inside objects;String type without time zone)
 $date3:=JSON Parse("\"2017-07-13T23:00:00.000Z\"";Is date)
  //$date3=13/07/17カレントの日付保存設定が"日付型"になっている場合、以下のように書くことができます:
 C_OBJECT($o)
 C_TEXT($json)
 C_DATE($birthday)
 
 $json:="{\"name\":\"Marcus\",\"birthday\":\"2017-10-16\"}"
 $o:=JSON Parse($json)
 $birthday:=$o.birthday
  //$birthday=16/10/17注: この設定についての詳細な情報については、互換性ページ内にある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用する"を参照して下さい。
ここでは JSON Stringify と JSON Parse コマンドの併用例を紹介しています:
 C_TEXT($JSONContact)
 C_OBJECT($Contact;$Contact2)
 $Contact:=New object("name";"Monroe";"firstname";"Alan")
 
  // JSON Stringify: JSON オブジェクトからJSON文字列への変換
 $JSONContact:=JSON Stringify($Contact)
 
  // JSON Parse: JSON文字列からJSONオブジェクトへの変換
 $Contact2:=JSON Parse($JSONContact)JSON配列から4Dコレクションを作成したい場合を考えます:
 C_COLLECTION($myCol)
 $myCol:=JSON Parse("[\"Monday\",10,\"Tuesday\",11,\"Wednesday\",12,false]")以下の文字列を解析し、それぞれのプロパティの行の位置とオフセットを取得したい場合を考えます:
{
    "alpha": 4552,
    "beta": [
        {
            "echo": 45,
            "delta": "text1" 
        },
        {
            "echo": 52,
            "golf": "text2" 
        }
    ]
}この場合、以下のように書くことができます:
 C_OBJECT($obInfo)
 $obInfo=JSON Parse("json_string";Is object;*) //* 引数を渡して返された$obinfoオブジェクト内に
  // __symbols プロパティを取得する$obInfo オブジェクトの中身は以下のようになっています:
{alpha:4552,
beta:[{echo:45,delta:text1},{echo:52,golf:text2}],
__symbols:{alpha:{line:2,offset:4},
beta:{line:3,offset:4},
beta[0].echo:{line:5,offset:12},
beta[0].delta:{line:6,offset:12},
beta[1].echo:{line:9,offset:12},
beta[1].golf:{line:10,offset:12}}}
									Field and Variable Types
									
									JSON PARSE ARRAY
									
									JSON Stringify
									
									JSON Validate
									
	プロダクト: 4D
	テーマ: JSON
	番号: 
        1218
        
        
        
	
	初出: 4D v14
	変更: 4D v16 R4
	変更: 4D v16 R6
JSON validator
	
	
	
	
	
	
	
	
	ランゲージリファレンス ( 4D v18)
	
	
	
	
	
 コメントを追加
コメントを追加