0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apex_Apex REST APIで連携されたJOSNデータを処理

Last updated at Posted at 2025-01-11

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);

Object型で受け取る
Object型で受け取るため、後で適切な型にキャストする必要があり


String name = (String) dataMap.get('userName');

String型キャスト
キャストとは型変換のことで、受け取ったデータをStringに型変換します。
Object型で受け取tているから、きちんと型定義が必要です。
他の項目もキャストします。


List< Object > hobbiesList = (List< Object >) dataMap.get('hobbies');

配列(オブジェクト)で受け取っているもの
ListのsObject型などにキャストします。
その後ループ処理して、Listを一つずつ抜き出しています。


List< Object > skillSetList = (List< Object >) dataMap.get('skillSet');

配列(オブジェクト)で更に中に項目があるもの
ちょっと更に複雑です。
ListのsObject型などにキャスト後ループ処理します。
そのときにまず、Mapに格納します。

String category = (String) skill.get('category');
そのままMapでgetできるものはgetsite取得します。

List< Object > items = (List< Object >) skill.get('items');
更にネストしている構造のものに関しては、またgetでListに格納します。
String itemStr = (String) item;
そしてキャスとして項目を受け取って処理します。そのときはもちろんループです。

使ってみよう!


このクラスを開発者コンソールで作成します。

その後、匿名コードにて、

SimpleJsonExample.parseJson();

を実行してね!



面倒かもしれないけど、慣れてみようね!

何か参考になれば嬉しいな!

励みになるから、イイネ、フォローよろしくね!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?