JsonMerge - JSONのマージ

ひとつ以上の入力のJSONに対して更新箇所をJSONPath式で指定して、別のJSONフィールドを差し込みます。

■ストリーム情報

入力フォーマットJSON
接続数無制限
出力フォーマットJSON
説明ベースとするJSON で指定された入力のJSONを更新したJSON

■コンポーネントプロパティ

名前プロパティ型マッピング説明
DestinputComponent- 入力ストリームのうち、更新のベースとなるストリームを出力したコンポーネント名を指定します。
ここで指定されたコンポーネントの出力はストリームコンテナ(例えばFileGetコンポーネントで「*.json」を読み込んだ場合)であってもかまいません。
同名のフィールドが存在する場合の処理choice入力&出力JSONフィールド名で指定したJSONフィールドが既に存在する場合の処理を選択します。
エラー [Error] - JSONフィールドがすでに存在する場合は、エラーになります。
上書き [Overwrite] - JSONフィールドの値を上書きします。
無視 [Ignore] - JSONフィールドがすでに存在する場合は、その値を変更せずにスキップします。
マージcategory-ベースとするJSON で指定されたJSONに対する更新内容を定義します。
詳しくは、下記トピック「更新内容の定義」を参照してください。

■トランザクション処理

コミット何もしません。
ロールバック何もしません。

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
汎用 なし コンポーネントの入力ストリーム1JSONPath式が不正な場合
2JSONPath式にマッチしなかった場合
3マージ中にエラーが発生した場合
5JSONフィールド名で指定した名前、もしくはインデックス番号が不正な場合
6JSONフィールド名で指定した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
  }
}
					

設定
ベースとするJSON会社を出力するコンポーネント

ベース側JSONPath式$.会社
JSONフィールド名リーダー
入力JSON役員を出力するコンポーネント
入力側JSONPath式$.役員

入力JSON
{
  "会社": {
    "リーダー": { <-- リーダーフィールドとしてマージ
      "名前" : "山田太郎",
      "年齢" : 30
    }
  }
}
					

配列の末尾にオブジェクトを挿入する例

下記入力JSONの「メンバー」配列の末尾に「新規メンバー」オブジェクトを挿入します。

入力JSON
{
  "チーム": {
    "メンバー":[]
  }
}
					
{
  "新規メンバー": {
    "名前" : "山田太郎",
    "年齢" : 30
  }
}
					

設定
ベースとするJSON$.

ベース側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」欄に反映する事が出来ます。