質問
RESTコネクターで取得するJSONデータを、CSVファイルにマッピングする処理を行いたいですが、JSONデータ内にelementが複数あり、その数が可変であるため、あらかじめ入力スキーマにて子要素にインデックスをつける方法ができません。その場合のデータ取得方法を教えてください。
JSONデータのサンプルは以下となります。"userGroupIds"の要素数は変動します。
{
"pageSize": 500,
"pageId": 1,
"pageCount": 100,
"totalCount": 100,
"users": [
{
"userId": 12345,
"userName": "sample@domain.com",
"firstName": "太郎",
"lastName": "田中",
"firstNameKana": "タロウ",
"lastNameKana": "タナカ",
"recoverableLimit": "2025/01/01",
"location": "東京",
"userGroupIds": [
1,
2,
3
],
"mainGroupId": 100,
"enableSso": false,
"ssoNameId": "*******",
"userText": {
"所属支店": "丸の内支店",
"所属部署": "経理部"
}
}
]
}
回答
可変である要素を繰り返し処理(データ件数)を使用し、繰り返し内で値を結合することで取得することが可能です。
以下、スクリプトの構成例を紹介しますので参考としてください。
■スクリプトのフロー図
■スクリプトの処理概要
GET実行処理にて取得したJSONデータをユーザーごとに繰り返しユーザーデータを取得する。
繰り返し処理の中でさらに"userGroupIds"ごとに繰り返しをすることで、"userGroupIds"のデータを区切り文字で区切って連結させて出力させる。
■各コンポーネントの設定ポイント
- 事前設定
取得したいデータの項目用にそれぞれをスクリプト変数を準備します。
- 繰り返し処理(データ件数)①
GET実行処理よりデータフローを引きます。
ユーザーごとにCSVファイルへの書き込み処理を行うため、[1ループでの処理件数]は「1」を設定します。
また、ユーザーごとに処理を繰り返すよう設定するため、[XMLデータ処理]-[分割パス]では
「/root/users/element」を設定します。
- マッピング①
繰り返し処理(データ件数)①よりデータフローを引きます。
"userGroupIds"以外のデータをスクリプト変数に格納します。
- 繰り返し処理(データ件数)②
繰り返し処理(データ件数)①よりデータフローを引きます。
"userGroupIds"ごとに要素の値をスクリプト変数「グループ」に連結して格納するため、[1ループでの処理件数]は「1」を設定します。
"userGroupIds"ごとに処理を繰り返すよう設定するため、[XMLデータ処理]-[分割パス]では「/root/users/element/userGroupIds/element」を設定します。
- マッピング②
繰り返し処理(データ件数)②よりデータフローを引きます。
連結ロジックにて以下の3つを連結させたデータをスクリプト変数「グループ」に格納します。
・スクリプト変数「グループ」
・区切り文字(出力データの区切り文字は使用しないようにしてください。)
※今回はパイプを使用しています。
・"userGroupIds"のelement
- マッピング③
マッピング①と②で格納したスクリプト変数を出力先のデータ項目へマッピングします。
スクリプト変数「グループ」につきましては、不要な区切り文字をトリムロジックを使用して適宜削除してください。
下図では、両側トリムロジックを使用しています。
- CSVファイル書き込み処理
ユーザーごとに書き込み処理を行うため、
[書き込み設定]では、「上書き」「追加書き込み」のオプションを有効にしてください。
- 変数代入処理
次のユーザーの処理をする際に連結した"userGroupIds"のelement情報をクリアするため、何も設定していない一行文字列定数ロジックをスクリプト変数「グループ」へ代入してください。
■出力データのサンプル
赤枠のようにパイプ「|」で区切られた複数の値を連結して出力されます。
コメント
0件のコメント
記事コメントは受け付けていません。