JSON サポート
Apex では JavaScript Object Notation (JSON) がサポートされ、Apex オブジェクトの JSON 形式へのシリアライゼーション、シリアライズされた JSON コンテンツのデシリアライゼーションを実行できます。
Apex では、JSON シリアライゼーションとデシリアライゼーションのメソッドを公開するクラスセットを提供します。次の表は、使用可能なクラスを示しています。
| クラス | 説明 |
|---|---|
| System.JSON | Apex オブジェクトを JSON 形式でシリアライズするメソッドと、このクラスの serialize メソッドを使用して、シリアライズされた JSON コンテンツをデシリアライズするメソッドがあります。 |
| System.JSONGenerator | 標準 JSON 符号化方式を使用してオブジェクトを JSON コンテンツにシリアライズする場合に使用されるメソッドが含まれます。 |
| System.JSONParser | JSON 符号化されたコンテンツのパーサーを表します。 |
System.JSONToken は、JSON 解析に使用されるトークンを列挙します。
これらのクラスのメソッドは、実行中に問題が発生した場合 JSONException を生成します。
- JSON サポートの考慮事項
-
- JSON のシリアライゼーションとデシリアライゼーションのサポートは、sObject (標準オブジェクトとカスタムオブジェクト)、Apex プリミティブ型とコレクションデータベースメソッドの戻り値の型 (SaveResult、DeleteResult など)、Apex クラスのインスタンスで利用できます。
- 管理パッケージの sObject 型のカスタムオブジェクトのみ、管理パッケージ外のコードからシリアライズできます。管理パッケージに定義される Apex クラスのインスタンスであるオブジェクトは、シリアライズできません。
- Map オブジェクトは、キーとして次のいずれかのデータ型を使用する場合にのみ、JSON にシリアライズできます。
- オブジェクトが上位型として宣言され、下位型のインスタンスに設定されている場合、一部のデータが失われる可能性があります。オブジェクトをシリアライズしてデシリアライズすると、上位型および下位型に固有の項目は失われます。
- オブジェクトに、そのオブジェクト自体への参照が設定されている場合はシリアライズされず、JSONException が生成されます。
- 同じオブジェクトを 2 回参照する参照グラフがデシリアライズされると、参照されるオブジェクトのコピーが複数生成されます。
- System.JSONParser データ型は、シリアライズできません。Visualforce コントローラーなど、System.JSONParser 型のメンバー変数を持つシリアライズ可能なクラスのインスタンスを作成しようとすると、例外が発生します。シリアライズ可能なクラスで JSONParser を使用するには、メソッド内でローカル変数を使用します。
バージョン管理動作の変更
API バージョン 53.0 以降では、DateTime の形式と処理が更新されました。小数点以下の桁数が 3 桁を超える JSON 要求の DateTime 値が API で正しく処理されます。サポートされていない DateTime 形式 (123456000 など) を使用する要求はエラーになります。https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_valid_date_formats.htm に示されている DateTime 形式に厳密に従うことをお勧めします。