JSON 解析コンポーネントは、DataWorks Data Integration のリアルタイム抽出・変換・書き出し (ETL) タスクで利用できます。ソースと宛先の間に JSON 解析コンポーネントを追加して、ソースからの JSON データをテーブルデータに解析できます。
JSON 解析コンポーネントの作成と構成
ステップ 1: データ統合タスクの構成
データソースを作成します。詳細については、「データソース管理」をご参照ください。
データ統合タスクを作成します。詳細については、「Data Integration でのリアルタイム同期タスクの構成」をご参照ください。
説明データ統合タスクがリアルタイム単一テーブル同期タイプを使用する場合、ソースコンポーネントと宛先コンポーネントの間にデータ処理コンポーネントを追加できます。詳細については、「サポートされているデータソースと同期ソリューション」をご参照ください。
ステップ 2: JSON 解析コンポーネントの追加
リアルタイム ETL タスク構成ページの DAG キャンバスで、ソースコンポーネントとディスティネーションコンポーネントの間にある
ボタンをクリックし、[JSON 解析] コンポーネントを選択します。
JSON 解析コンポーネントを構成します。
重要JSON データ構造を取得するには、ソース Kafka コンポーネントで [データサンプリング] を実行します。
JSON 解析用の固定フィールドの追加
JSON 形式のデータを取得します。
JSON データの取得
説明
図
データサンプリングから JSON データを取得
データサンプリング後、[JSON 解析用の固定フィールドを追加] をクリックします。[JSON 解析用の固定フィールド] ダイアログボックスで、ソースフィールドを選択し、[JSON データ構造を取得] をクリックします。

手動で入力した JSON データを取得
データサンプリングが実行されない場合、またはソースデータが空の場合は、フィールドを手動で編集できます。
[JSON 解析用の固定フィールドを追加] をクリックします。[JSON 解析用の固定フィールド] ダイアログボックスで、[JSON テキストの編集] をクリックします。[JSON テキストの編集] ダイアログボックスで、JSON コンテンツを手動で入力し、[OK] をクリックしてアップロードされた JSON コンテンツをフォーマットします。

[フィールドの追加] をクリックしてフィールドを手動で追加します。アップストリームフィールドの値を取得できず、[JSON テキストの編集] ボタンをクリックして JSON コンテンツをアップロードしていない場合は、固定フィールド解析ルールを手動で定義できます。次の表にパラメーターを示します。
パラメーター
説明
フィールド名
ダウンストリームノードで参照される、新しく解析されたフィールドの名前。
値
JSON 解析パスを指定します。解析構文は次のとおりです。
$: ルートノード。.: 子ノード。[]:[number]は配列インデックスを示します。インデックスは 0 から始まります。[*]: 配列を複数行の出力に展開します。各要素はレコード内の他のフィールドと結合されて個別の行を形成し、ダウンストリームノードに出力されます。
説明JSON 解析パス内の JSON フィールド名には、文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。
デフォルト値
アップストリームテーブルのフィールドが変更されたために値を取得するための JSON パスが存在しない場合に使用するデフォルト値。
[NULL]: フィールドに NULL 値が割り当てられます。
[入力しない]: フィールドには値が入力されません。NULL の選択との違いは、宛先テーブルの対応するフィールドに書き込むときに、宛先フィールドにデフォルト値が構成されている場合、NULL の代わりにそのデフォルト値が使用されることです。
[ダーティデータ]: レコードは同期タスクのダーティデータとしてカウントされます。その後、システムはダーティデータ許容度構成に基づいて、エラーでタスクを停止するかどうかを決定します。
[定数を手動で入力]: 手動で入力した定数をフィールド値として使用します。

JSON 解析用の動的フィールドの追加
JSON 形式のデータを取得します。
JSON データの取得
説明
図
データサンプリングから JSON データを取得
データサンプリング後、[JSON 解析用の動的フィールドを追加] をクリックします。[JSON 解析用の動的出力フィールド] ダイアログボックスで、ソースフィールドを選択し、[JSON データ構造を取得] をクリックします。

手動で入力した JSON データを取得
[JSON 解析用の動的フィールドを追加] をクリックします。[JSON 解析用の動的出力フィールド] ダイアログボックスで、アップストリームフィールドの値を取得できない場合、または値が JSON 仕様に準拠していない場合は、[JSON テキストの編集] をクリックします。[JSON テキストの編集] ダイアログボックスで、JSON コンテンツを手動で入力し、[OK] をクリックしてアップロードされた JSON コンテンツをフォーマットします。

JSON オブジェクトを動的に解析します。
JSON コンテンツで、動的に解析する JSON オブジェクトフィールドを選択します。システムは、JSON オブジェクト内の各フィールドの解析構成を固定出力フィールドに自動的に追加します。
JSON オブジェクトの動的解析を構成します。同期タスクの実行中、指定されたパスにある JSON オブジェクトの各フィールドは、元の JSON フィールド名と値を持つ STRING 型としてレコードに追加され、ダウンストリームノードに送信されます。これにより、システムは同期中に新しいフィールドなどの構造変更を自動的に検出して出力できます。
次の図に例を示します。
オブジェクトが解析される前:

オブジェクトが解析された後:

次の表に解析結果を示します。
_value_(STRING)
c1(STRING)
c2(STRING)
c3(STRING)
{ "dynamic": { "c1": 2, "c2": ["a1","b1"] } }2["a1","b1"]未入力
{ "dynamic": { "c1": 2, "c2": ["a1","b1"], "c3": {"name": "jack"} } }2["a1","b1"]{"name": "jack"}
フィールドを手動で追加します。
フィールドを手動で追加することもできます。アップストリームの子フィールドの値を取得できず、[JSON テキストの編集] ボタンをクリックして JSON コンテンツをアップロードしていない場合は、その値を編集して動的フィールド解析ルールを手動で定義できます。
パラメーター
説明
JSON オブジェクトの指定
JSON オブジェクト解析パスを指定します。解析構文は次のとおりです。
$: ルートノード。.: 子ノード。[]: [number] は配列インデックスを示します。インデックスは 0 から始まります。
注: JSON 解析パス内の JSON フィールド名には、文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。
デフォルト値
指定された JSON 解析パスの解析に失敗した場合、または対応するフィールドが存在しない場合のデフォルトの動作を指定します。
無視: 動的解析は実行されません。ダーティデータ: レコードは同期タスクのダーティデータとしてカウントされます。その後、システムはダーティデータ許容度構成に基づいて、エラーでタスクを停止するかどうかを決定します。
同じ名前の既存のフィールドを処理するためのポリシー。
動的 JSON フィールドがキーと値のペアによって展開される場合、最初のレイヤーのみが展開されます。展開されたフィールドが既存のフィールドと同じ名前を持つ場合は、競合解決ポリシーを選択する必要があります。使用可能なポリシーは次のとおりです。
[上書き]: 既存のフィールドの値を新しいフィールドの値に置き換えます。
[破棄]: 既存のフィールドの値を保持し、新しいフィールドの値を破棄します。
[エラー]: タスクはエラーを報告して実行を停止します。
その他の操作
[ソース]、[JSON 解析]、および [宛先] の設定を構成した後、右上隅にある [シミュレーションの実行] をクリックしてデータ統合タスクをシミュレートします。これにより、出力データが要件を満たしていることを確認できます。
をクリックしてリーフフィールドを選択します。対応する解析構成が [固定出力フィールド] セクションに自動的に追加されます。
アイコンをクリックし、ダイアログボックスで [JSON オブジェクトの各キーと値のペアを個別のフィールドとして追加します。キーはフィールド名として使用され、対応する値が割り当てられます。] を選択します。



アイコンをクリックし、ダイアログボックスで [配列を複数行の出力として追加します。] を選択します。


