データマッピング:JSON形式のデータ

JSONデータ形式は、オープンな標準規格として、新しいデータ交換のニーズに合わせて進化を続けています。JSON Linesは、http://jsonlines.org/で定義されており、構造化されたデータを格納するための便利なテキスト形式です。各レコードが1行で構成され、有効なJSONオブジェクトとして表現されます。JSON Linesは、表形式のデータを扱い、データの型を明確に識別するため、曖昧さを排除できます。これにより、レコードを1つずつ処理できるため、データの出力や送信に非常に役立つ形式です。

Altova MapForceは、JSON Lines形式のデータを、データソースまたはデータターゲットとしてサポートしています。ここでは、データベースのテーブルからレコードを抽出し、それをJSON Lines形式のファイルに出力するマッピングプロジェクトの例を見ていきましょう。

MapForceは、以下の機能を提供します 高度なデータマッピング、変換、およびデータ加工 様々な一般的なデータ形式とリレーショナルデータベース間の連携を可能にします。この例では、モバイル調査アプリケーション用に元々作成されたデータベースのテーブルに格納されている情報を、JSON Lines形式のファイルにまとめるというタスクを想定しましょう。ここで扱う「Cars」テーブルは、様々なメーカーの自動車のモデル名や仕様情報を含むデータベースの一部です。

データマッピングの出力形式として、JSON Linesを使用します

このJSON Lines形式のデータマッピング作業を完了するための私たちの戦略はシンプルです。まず、既存のデータベーステーブルを調査し、JSON Lines形式でデータを表現するための小さなインスタンスファイルを作成します。次に、MapForceのマッピング設計ツールを使用して、データベーステーブルの各列を、JSON Lines形式の出力における対応する項目にマッピングします。最後に、MapForceの出力ボタンをクリックするだけで、テーブル全体が自動的に処理され、出力ファイルが生成されます。

各ステップの実行には、Altova MissionKitに含まれるツールを使用します。まず、DatabaseSpyを使ってデータベースを開き、テーブルデザイナーのビューで「Cars」テーブルを確認します

この表には、JSON形式の文字列データと数値データの9つの列が含まれています。ただし、いくつかの列にはnull値が許可されています。左側のウィンドウには、データ行の総数である6,266行が表示されています。右クリックのコンテキストメニューを使用すると、最初の200行を抽出してデータを詳しく調べることができます

6行目と7行目を見ると、確かにいくつかの行にヌルデータが含まれていることがわかります。ソースデータについて理解できたので、データ構造を単一のJSON形式で表現する小さなサンプルファイルを作成できます。XMLSpyのJSON編集機能は、そのための優れたツールです

XMLSpyでは、JSON形式の入力データに色分けが施されており、ファイルが正しい形式であるかを確認できます。また、ファイル拡張子を.jsonlとして保存することで、JSON Lines形式であることを示しています。

次に、新しいMapForceを開き、データベースのテーブルと.jsonl形式のデータファイルをインポートします

.jsonl形式のデータファイルを読み込むと、MapForceは自動的にJSONスキーマを作成し、そのスキーマは、データの内容を記述する配列内の各要素に対して、考えられるデータ型を定義します。デフォルトのスキーマでは1つの要素しか定義されていませんが、要素を選択し、コンテキストメニューを使用して複製を追加することで、さらに8つの子要素を作成できます

次に、データベースの各列を、JSON配列内の各要素に対応する適切なデータ型に接続します。また、"Cars"テーブルをJSONスキーマの最上位にある最初の項目に接続します。これにより、マッピング処理は"Cars"テーブルの各行に対して、新しい出力行を作成するように指示されます。

マッピングウィンドウの下部にある「出力」ボタンをクリックすると、テーブル全体を変換し、結果をプレビューできます。ただし、一つ問題があります。それは、ヌル値(空の値)を考慮していないことです。もし、ここで出力ファイルを保存すると、データベース内のすべてのヌル値が完全に無視され、JSON Linesファイル内の行が9フィールドよりも少なくなる可能性があります。このような行は、後続の処理で正確に解釈することができません。

Nullデータを含むJSON形式のデータマッピング

MapForceには、ヌル値(値が存在しない状態)を特定し、処理するためのフィルターが含まれています

JSON配列内の単一の要素は、数値とnull値の両方を持つことはできません。フィルターと関連コンポーネントの設定により、"シリンダー"列のnullデータは、項目4におけるnullデータ型にマッピングされます。もしnullでない場合は、数値データ型にマッピングされます。この同じフィルター構造を、残りのnull値を取りうるすべての列に適用できます。

MapForceには、ユーザー定義関数を作成できる機能があり、これを利用することで、フィルターの構造を保存し、このマッピングや、Nullデータを含む他のJSONデータマッピングで再利用することができます。 フィルターと関連するコンポーネントを選択し、機能のメインメニューから「ユーザー定義関数の作成」を選択するだけです

ユーザー定義関数は、選択されたコンポーネントをまとめて処理し、元のマッピングを置き換えた上で、関数ライブラリに追加されます

ライブラリからユーザー関数をドラッグし、他のヌル許容データベース列に接続するだけで、簡単に設定できます。

JSON形式のデータをマッピングする際、場合によっては、null値(値が存在しないことを示す値)を空文字列に変換する方が望ましいことがあります。MapForceでは、"substitute-missing"という機能を使って、そのような要件に対応できます。以下の画像では、最後のデータベース列にあるnull値が空文字列にマッピングされています

以下に、ヌル値検出機能を使用したデータマッピングの完了後の状態を示します

左側の「ライブラリ」ウィンドウで、強調表示されている「null検出機能」のユーザー関数にご注意ください。

すべての可能性のあるヌル値が考慮されたので、ここで「出力」ボタンをクリックして、.jsonl形式の出力ファイルを作成できます

なお、1675行などには、ヌル値と空文字列の両方が含まれていますが、1690行から1691行にはデータが完全に記載されています。

一度限りの変換であれば、この出力ファイルをすぐに保存できます。データベースが継続的に更新され、後で再度変換が必要な場合は、このマッピングをMapForce Serverの実行ファイルとして保存し、MapForce Serverで自動処理を行うか、または直接FlowForce Serverに展開することができます。

データマッピング:JSON Lines形式をソースファイルとして使用する

以下に示すデータマッピングは、.jsonl形式のソースファイルから取得した類似のデータセットを、データベースのテーブルにマッピングする例を示しています。

このバージョンをより分かりやすくするために、XMLSpyでJSONスキーマを編集し、配列内の各項目に対して説明を追加し、無効なデータ型を削除しました。このマッピングの設定で「出力」ボタンをクリックすると、データベーステーブルにデータをロードするためのSQLスクリプトが生成されます。

注意点として、どのヌル項目も、ソースからターゲットへの接続を必要としません。必要なヌル値は、18行のように、データベーステーブルに自動的に挿入されます

無料トライアル版をダウンロード:チュートリアル、ヘルプ、そして多くのサンプルが含まれており、JSON Lines形式のデータマッピングや、その他のデータマッピング、変換、加工などのプロジェクトを始めるのに役立ちます!