- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
Salesforce ApexでJSONデシリアライズ時のリストエラーを修正する方法
はじめに
SalesforceのApexコードで外部APIからJSONデータを取得し、デシリアライズする際に**「リスト形式のデータを正しく処理できない」**という問題が発生することがあります。
特に、**「単一オブジェクトとして処理しようとしたが、実際はリストだった」**というケースが多く見られます。
本記事では、この問題の原因と正しいデシリアライズ方法を解説します。
問題の発生原因
ApexでJSONデータを処理する際、取得するデータの構造とApexクラスの構造が一致していないと、適切にデシリアライズできません。
誤ったコードの例:
- public class Equifax {
- public class Empresa {
- public String name;
- public String id;
- }
- }
このコードでは、JSONレスポンスが**リスト(配列)**として返ってきた場合、Apex側で単一のオブジェクトとして処理しようとしてしまい、エラーが発生します。
正しいApexクラスの定義
外部APIのJSONデータの例(リスト形式):
- {
- "empresa": [
- {
- "name": "ABC Corp",
- "id": "12345"
- }
- ]
- }
このデータに対応するApexクラスを正しく定義するには、「リスト(List)」を用いたデータ構造にする必要があります。
修正後のApexコード
- public class Equifax {
- public List<Empresa> empresa;
- public class Empresa {
- public String name;
- public String id;
- }
- }
Apexでのデシリアライズ方法
次に、JSON.deserialize()
を使用して、正しくデシリアライズする方法を見ていきます。
修正前(誤ったデシリアライズ方法):
- Equifax.Empresa empresita = (Equifax.Empresa)JSON.deserialize(jsonString, Equifax.Empresa.class);
このコードでは、Equifax.Empresa
を単一オブジェクトとして扱っていますが、JSONの構造がリストのため、デシリアライズ時にエラーになります。
修正後(正しいデシリアライズ方法):
- Equifax empresita = (Equifax)JSON.deserialize(jsonString, Equifax.class);
この修正により、empresa
フィールドは List
- System.debug(empresita.empresa[0].name); // "ABC Corp"
- System.debug(empresita.empresa[0].id); // "12345"
まとめ
発生した問題
- JSONレスポンスがリスト形式だったが、Apex側で単一オブジェクトとして処理しようとしてエラーが発生した。
解決策
- JSONの構造に合わせて、Apexクラスを**リスト(List)**として定義する。
- デシリアライズ時に、適切なクラスを使用する。
コメント
コメントを投稿