JsonMerge - JSONのマージ
ひとつ以上の入力のJSONに対して更新箇所をJSONPath式で指定して、別のJSONフィールドを差し込みます。
■ストリーム情報
| 入力 | フォーマット | JSON |
| 接続数 | 無制限 |
| 出力 | フォーマット | JSON |
| 説明 | ベースとするJSON で指定された入力のJSONを更新したJSON
|
■コンポーネントプロパティ
| 名前 | プロパティ型 | マッピング | 説明 |
| Dest | inputComponent | - |
入力ストリームのうち、更新のベースとなるストリームを出力したコンポーネント名を指定します。
ここで指定されたコンポーネントの出力はストリームコンテナ(例えばFileGetコンポーネントで「*.json」を読み込んだ場合)であってもかまいません。
|
| 同名のフィールドが存在する場合の処理 | choice | 入力&出力 | JSONフィールド名で指定したJSONフィールドが既に存在する場合の処理を選択します。
| エラー [Error]
| - |
JSONフィールドがすでに存在する場合は、エラーになります。
|
| 上書き [Overwrite]
| - |
JSONフィールドの値を上書きします。
|
| 無視 [Ignore]
| - |
JSONフィールドがすでに存在する場合は、その値を変更せずにスキップします。
|
|
| マージ | category | - | ベースとするJSON で指定されたJSONに対する更新内容を定義します。
詳しくは、下記トピック「更新内容の定義」を参照してください。
|
■トランザクション処理
| コミット | 何もしません。 |
| ロールバック | 何もしません。 |
■エラー処理
| タイプ | パラメーター | エラー処理フロー
へのストリーム | エラー
コード | 説明 |
| 汎用 |
なし
| コンポーネントの入力ストリーム | 1 | JSONPath式が不正な場合 |
| 2 | JSONPath式にマッチしなかった場合 |
| 3 | マージ中にエラーが発生した場合 |
| 5 | JSONフィールド名で指定した名前、もしくはインデックス番号が不正な場合 |
| 6 | JSONフィールド名で指定したJSONフィールドが存在する場合 |
| 7 | ベース側JSONPath式で指定したフィールドの値がオブジェクトでも配列でもない場合 |
| 8 | 指定したコンポーネントが見つからない場合 |
| 9 | 入力JSONで指定したコンポーネントの出力がコンテナの場合 |
■更新内容の定義
ベース側JSONPath式と入力側JSONPath式は、JSONPath式エディタを使って指定することができます。
ベース側JSONPath式
フィールドを挿入される親オブジェクト、もしくは配列を選択するためのJSONPath式。
式にマッチしなかった場合はエラーになります。
式に複数マッチした場合はマッチした全てに挿入されます。
JSONフィールド名
挿入するJSONフィールドの名前。
ベース側JSONPath式で配列を指定した場合は、挿入する位置をインデックス番号で指定する事が出来ます。
指定しなかった場合は配列の末尾に追加されます。
入力JSON
入力側JSONPath式を適用する、JSONを出力したコンポーネントの名前を自動的に作成されたコンポーネント名プルダウンリストから選択します。
このプロパティで指定したコンポーネントの出力ストリームはストリームコンテナであってはいけません。
入力側JSONPath式
JSONフィールド名で選択されたJSONフィールドに差し込む内容を指定するためのJSONPath式を指定します。
式にマッチしなかった場合はエラーになります。
複数マッチした場合は最初にマッチした内容が差し込まれます。
■JSONPath
JSONPathは、JSONデータ内の特定の要素や値にアクセスするためのパス指定方法です。
ファイルの階層をたどるように、目的のデータにアクセスできます。
詳細はJSONPathのRFCをご参照ください。
基本的な書き方
以下にJSONPathの基本的な文法を紹介します。
| 書き方 | 意味 | 例 |
$ | ルート(JSONの先頭) | $ |
. | 子要素にアクセス | $.user.name |
[] | 配列やキーを指定 | $.items[0] |
* | ワイルドカード(すべての要素) | $.items[*].name |
?(@.<フィールド名>==<値>) | 条件式に一致する要素 | $.items[?(@.name=="製品A")] |
例
以下にいくつかのJSONPathの例をご紹介します。
{
"ユーザー": {
"名前": "太郎",
"年齢": 30
},
"商品": [
{ "名前": "製品A", "価格": 1000 },
{ "名前": "製品B", "価格": 2000 }
]
}
|
| 取得したいデータ | JSONPath | 結果 |
| ユーザー名 | $.ユーザー.名前 | "太郎" |
| 最初の商品名 | $.商品[0].名前 | "製品A" |
| すべての商品名 | $.商品[*].名前 | ["製品A", "製品B"] |
| すべての商品価格 | $.商品[*].価格 | [1000, 2000] |
| 製品Aの商品価格 | $.商品[?(@.名前=="製品A")].価格 | 1000 |
■変数の使用
JSONPath式の中ではフロー変数とシステム変数、外部変数セット、ストリーム変数が使用できます。
以下の様に条件式内に変数を埋め込むと、実際の値に置き替えてJSONPathを評価します。
$.商品[?(@.名前==$flow.<フロー変数名>)].価格
|
使用できる変数
| フロー変数 | $flow.<フロー変数名> |
| システム変数 | $system.<システム変数名>(英語名) |
| 外部変数セット | $exvar.<外部変数セット名>.<変数名> |
| ストリーム変数 | $stream.<ストリーム変数名>(英語名) |
■例
オブジェクトのフィールドに別のオブジェクトを挿入する例
下記入力JSONの「会社」オブジェクトに「リーダー」フィールドを作成し、その値に「役員」オブジェクトを挿入します。
入力JSON
{
"会社": {
}
}
|
{
"役員": {
"名前" : "山田太郎",
"年齢" : 30
}
}
|
設定
| ベース側JSONPath式 | $.会社 |
| JSONフィールド名 | リーダー |
| 入力JSON | 役員を出力するコンポーネント |
| 入力側JSONPath式 | $.役員 |
入力JSON
{
"会社": {
"リーダー": { <-- リーダーフィールドとしてマージ
"名前" : "山田太郎",
"年齢" : 30
}
}
}
|
配列の末尾にオブジェクトを挿入する例
下記入力JSONの「メンバー」配列の末尾に「新規メンバー」オブジェクトを挿入します。
入力JSON
{
"チーム": {
"メンバー":[]
}
}
|
{
"新規メンバー": {
"名前" : "山田太郎",
"年齢" : 30
}
}
|
設定
| ベース側JSONPath式 | $.チーム.メンバー |
| JSONフィールド名 | |
| 入力JSON | 新規メンバーを出力するコンポーネント |
| 入力側JSONPath式 | $.新規メンバー |
出力JSON
{
"チーム": {
"メンバー":[ <-- 末尾にオブジェクトをマージ
{
"名前" : "山田太郎",
"年齢" : 30
}
]
}
}
|
■JSONPath式エディタ
JSONPath式エディタはプロパティ値にJSONPath式を指定する場合にその入力をサポートするためのエディタです。ツリーからJSONフィールドを選択して、そこまでのJSONPath式をプロパティに設定することができます。
JSONPath式を指定するフィールドの右にある「...」をクリックすると起動します。
ツリー
ツリーにはJSONPath式の対象となるストリームのフィールド定義が表示されます。コンポーネントの入力側にリンクが繋がっていない場合や入力ストリームにフィールド定義がされていない場合は初期状態では何も表示されません。
「サンプル参照」ボタン
任意のJSONを読み込み、その構造をツリーに表示させることができます。
「保存する」チェックボックス
サンプル参照からJSONを読み込んでいる場合、[保存する]チェックボックスをオンにすると、読み込んだJSONがxfpファイル(プロジェクトファイル)に保存され、次回xfpファイルを開いたときに、同じサンプルを利用できるようになります。
注意:サンプルJSONはコンポーネントの実行に必要な情報ではありません。ファイルサイズの大きなJSONを保存するとxfpファイル(プロジェクトファイル)のファイルサイズが大きくなり、保存やコンパイルに時間がかかってしまいます。そのため、サンプルJSONの保存は開発やテストの段階のみ行うようにしてください
。
JSONPathの設定
ツリーでノードを選択すると、そのJSONPathが「選択パス」欄に表示されます。「↓」ボタンを押すとそのパスが「JSONPath」欄にコピーされます。
「JSONPath」欄は編集可能なテキストフィールドで、複雑なJSONPath式を指定する場合はそこに直接記述することができます。
変数の挿入
JSONPath式エディタの「カーソル位置への挿入」ボタンで変数タブで選択した変数を「JSONPath」欄のカーソル位置に追加する事が出来ます。
JSONPath式のテスト
テストボタンをクリックする事でJSONPath式のテストダイアログを開き、JSONPath式の動作をテストする事が出来ます。
実行ボタンをクリックすると、左側の「JSON」テキストエリアに入力されたJSONに対して、「JSONPath」欄に入力されたJSONPath式を評価した結果を確認する事ができます。
「JSONPath」欄は編集する事が出来、編集後は「適用」ボタンをクリックする事でJSONPath式エディタの「JSONPath」欄に反映する事が出来ます。