Page History
...
ただし、XPRIM_JsonObject の Insert メソッドには挿入する値のプロパティ名を指定する Key パラメータがありますが、XPRIM_JsonArray の Insert メソッドではアレイの最後に値が追加されるため Key パラメータはないことに注意してください。
例:
* 文字列 "John" を JSON オブジェクトの "name" プロパティとして挿入
#RootObject.InsertString Key('name') String('John')
* JSON アレイに番号 9 を挿入
#JsonArray.InsertNumber Number(9)
* NULL 値を JSON オブジェクトの "allergies"プロパティとして挿入
#RootObject.InsertNull Key('allergies')
次の例は別のオブジェクトのプロパティとしてのオブジェクト/アレイの作成方法です。
* XPRIM_JsonObject 参照を定義
Define_Com Class(#XPRIM_JsonObject) Name(#ChildObject)
* 住所の street (番地) と suburb (市町村) を #ChildObject に挿入
#ChildObject.InsertString Key('street') String('122 Arthur St')
#ChildObject.InsertString Key('suburb') String('North Sydney')
* #ChildObject を "address" という名前のメンバとして #RootObject に挿入
#RootObject.InsertElement Key('address') Element(#ChildObject)
XPRIM_JsonObject (または XPRIM_JsonArray) を (デバッグ用などの用途で) 文字列に変換する場合は、SerializeAsString メソッドを呼び出します。
Define_Com Class(#PRIM_DC.UnicodeString) Name(#MyJsonString)
* JSON を文字列に変換
#MyJsonString := #RootObject.SerializeAsString
SerializeToFile を利用して、JSON オブジェクト (またはアレイ) をファイルにシリアル化することもできます。
...
ParseString や ParseFile メソッドを利用して、JSON 文字列を解析し、JSON 文字列から XPRIM_JsonObject や XPRIM_JsonArray を構築することもできます。
* エラー詳細を保持するための ErrorInfo オブジェクトを定義
Define_Com Class(#XPRIM_ErrorInfo) Name(#ErrorInfo)
* 'Parse' メソッドを呼び出し
#RootObject.ParseString String(#JsonString) ErrorInfo(#ErrorInfo)
* 解析が失敗した場合、エラー・メッセージを取得
If (*Not #ErrorInfo.OK)
#ErrorMessage := #ErrorInfo.ErrorMessage
EndIf
次の Get… アクセサー・メソッドのいずれか 1 つを使用して、オブジェクトやアレイの値にアクセスすることができます。
...
Define_Com Class(#XPRIM_JsonObject) Name(#RootObject)
Define_Com Class(#XPRIM_ErrorInfo) Name(#ErrorInfo)
* JSON 文字列を解析
#RootObject.ParseString String(#String) ErrorInfo(#ErrorInfo)
* 最初に JSON 文字列の解析に成功したことを確認
If (#ErrorInfo.OK)
...
* 値を取得
#GivenName := #RootItem.GetObject('name').GetString('given')
#Surname := #RootItem.GetObject('name').GetString('surname')
#Age := #RootItem.GetNumber('age')
Endif
ItemCount プロパティを使うと、含まれるアレイ (またはオブジェクト) の数が分かります。
Define_Com Class(#XPRIM_JsonArray) Name(#ContactNumbers)
* contactNo の値 (アレイ), ... を取得し、
* ... #ContactNumbers に割り当て
#ContactNumbers.Refer To(#RootItem.GetArray('contactNo')
* 'ItemCount' プロパティを使って、アレイ長を取得
#ContactCount := #ContactNumbers.ItemCount
JSON アレイ内のエレメントで繰り返し処理を行うには、以下のように FOR-EACH-IN を利用します。
* この前の例から contactNo アレイを利用
FOR EACH(#Number) IN(#ContactNumbers)
#COM_SELF.ProcessContactNumber Number(#Number)
ENDFOR
JSON 要素 (XPRIM_JsonElement) のタイプは、その Type プロパティを読み込むことで確認できます。戻される値は次のいずれかになります。
...