Apex REST APIで連携されたJOSNデータを処理する場合、どうするかを書くよ!
簡単な例だから、実際はもっとデータに欠けがないかとか、色々チェックしたりするよ!
構造が深いネストにも対応しているよ!
Mapを使用する例を記載するね!Map使用しない場合もあるけど、連携元が項目など変更した場合に最小限になるよ!
初心者~中級者の過程でなれておこうね!
以下コードだよ!
SimpleJsonExample.cls
public class SimpleJsonExample {
public static void parseJson() {
// ネストされたリストを含むJSONデータを準備
// 趣味の配列の中に、さらに詳細情報を持つオブジェクトの配列
String jsonResponse = '{'
+ '"userName": "田中太郎",'
+ '"age": 25,'
+ '"isStudent": true,'
+ '"hobbies": ["読書", "旅行", "料理"],'
+ '"skillSet": ['
+ ' {'
+ ' "category": "プログラミング",'
+ ' "items": ["Java", "Python", "Apex"],'
+ ' "years": 3'
+ ' },'
+ ' {'
+ ' "category": "言語",'
+ ' "items": ["英語", "中国語"],'
+ ' "years": 5'
+ ' }'
+ ']'
+ '}';
// JSONをMapとして解析
Map<String, Object> dataMap = (Map<String, Object>) JSON.deserializeUntyped(jsonResponse);
// 基本的なデータの取得
String name = (String) dataMap.get('userName');
Integer age = (Integer) dataMap.get('age');
Boolean isStudent = (Boolean) dataMap.get('isStudent');
// 基本情報の出力
System.debug('■ 基本情報');
System.debug('名前: ' + name);
System.debug('年齢: ' + age);
System.debug('学生?: ' + isStudent);
// 単純な配列の処理
System.debug('■ 趣味リスト');
List<Object> hobbiesList = (List<Object>) dataMap.get('hobbies');
for (Object hobby : hobbiesList) {
String hobbyStr = (String) hobby;
System.debug('- ' + hobbyStr);
}
// ネストされた配列(skillSet)の処理
// skillSetは配列なので、List<Object>として取得
System.debug('■ スキルセット');
List<Object> skillSetList = (List<Object>) dataMap.get('skillSet');
// skillSetの各要素はオブジェクトなので、Map<String, Object>にキャストして処理
for (Object skillObj : skillSetList) {
// 各スキルセットをMapとして扱う
Map<String, Object> skill = (Map<String, Object>) skillObj;
// カテゴリと経験年数を取得
String category = (String) skill.get('category');
Integer years = (Integer) skill.get('years');
System.debug('カテゴリ: ' + category + ' (経験年数: ' + years + '年)');
// itemsは配列なので、List<Object>として取得して処理
List<Object> items = (List<Object>) skill.get('items');
for (Object item : items) {
String itemStr = (String) item;
System.debug(' - ' + itemStr);
}
}
}
}
Map< String, Object > dataMap = (Map< String, Object >) JSON.deserializeUntyped(jsonResponse);
String name = (String) dataMap.get('userName');
Object型で受け取tているから、きちんと型定義が必要です。
他の項目もキャストします。
List< Object > hobbiesList = (List< Object >) dataMap.get('hobbies');
その後ループ処理して、Listを一つずつ抜き出しています。
List< Object > skillSetList = (List< Object >) dataMap.get('skillSet');
ListのsObject型などにキャスト後ループ処理します。
そのときにまず、Mapに格納します。
String itemStr = (String) item;
そしてキャスとして項目を受け取って処理します。そのときはもちろんループです。
使ってみよう!
このクラスを開発者コンソールで作成します。
その後、匿名コードにて、
SimpleJsonExample.parseJson();
を実行してね!
面倒かもしれないけど、慣れてみようね!
何か参考になれば嬉しいな!
励みになるから、イイネ、フォローよろしくね!