メッセージ・マップ での異種 JSON データの変換
グラフィカル・データ・マッピング・エディターでは、 「ユーザー定義の追加」 関数を使用して異種 JSON データを変換できます。
始める前に
出力ドメインを JSONに設定して、 メッセージ・マップ を作成します。 詳しくは、 メッセージ・マップでの JSON メッセージのグラフィカルなモデル化 を参照してください。
このタスクの概要
JSON の異種データをモデル化する方法では、それぞれの構造を、使用できる各形式で提示可能なさまざまなデータのユニオンとして定義します。 その後、データを設定します。この設定手順は、データの一部のインスタンスにオプションとして表示されます。
デフォルトでは、 グラフィカル・データ・マッピング・エディターで JSON データをモデル化すると、すべてのインスタンスが同じオブジェクトと配列が作成されます。 同じ名前のオブジェクトはすべて、同じデータ・フィールド・セットを持ち、配列内のエンティティーはすべて、同じデータ・フィールド・セットを持つことになります。 このユース・ケースは、JSON データ・フォーマットの最も一般的な使用方法に対応します。
JSON では、JSON 配列内の項目に、異なる構造およびタイプを指定できます。 JSON オブジェクトの場合、
一部の JSON アプリケーションでは、含まれているオブジェクトまたは値が同じ名前であって、
別の構造とタイプを持つこともできます。 JSON 仕様の状態は次のとおり: オブジェクト SHOULD 内の名前は固有でなければなりません。
詳しくは、 The JavaScript Object Notation (JSON) Data Interchange Formatを参照してください。 この形式は、外部アプリケーションによって要求がある場合のみ使用します。 この形式の JSON データは、異種 JSON データと呼ばれます。
メッセージ・データ用の JSON スキーマがある場合は、 JSON スキーマを使用した JSON メッセージの作成または変換の説明に従って使用できます。 あるいは、このトピックで説明されているように 「ユーザー定義の追加」 機能を使用して異種 JSON データをモデル化することも、 同等の XML スキーマ・モデルを使用したメッセージ・マップで使用するための JSON メッセージのモデル化で説明されている同等の XML スキーマ・モデルを使用することもできます。
- 配列内のすべての項目にオブジェクトか値のいずれかを含める必要があります。
- Add User-Defined 関数を使用して、異種 JSON データ・オブジェクト配列をモデル化できます。
- 異種 JSON 値の配列では、各インスタンスのタイプが異なる可能性があります。このような配列をモデル化するには、配列内の個々の値項目を表すために、外部スキーマを使用して Item エレメントのタイプを指定する必要があります。
手順
グラフィカル・データ・マッピング・エディターで異種 JSON データをモデル化するには、以下の手順を実行します。
例
ここでは、異なる名前の値を持つ 2 つの異種 JSON データ・オブジェクトを使用する車両を記述している JSON オブジェクト・メッセージを、異種 JSON 配列メッセージに変換して項目ごとに異なる名前の値を持つデータ・オブジェクトになるようにする例を示します。
入力アプリケーションは、2 つの異種 JSON データ・オブジェクトを使用する車両を記述した 異種 JSON オブジェクト・メッセージを生成します。 各 JSON データ・オブジェクトの名前は attribute で、それぞれ異なる名前値エレメントが含まれています。 入力 JSON データを以下に示します。
{ "Description" : {
"attribute" : {
"colour" : "blue",
"metallic" : true
},
"attribute" : {
"capacity" : 1.4,
"fuel" : "diesel"
}
}
}
- 異種属性オブジェクトには、名前値である colour と metallic、または capacity と fuel が含まれます。
- それぞれの名前値は、オプションとしてモデル化されます (「最小オカレンス」を 1 に設定)。

[{"attributeType":"Paint","colour":"blue","metallic":true},
{"attributeType":"Engine","capacity":1.4E+0,"fuel":"diesel"}]- 配列は、タイプ Anonymous の JSON オブジェクトによって表されます。
- 最初のエレメントは、単一の必須エレメント attributeType です。 配列内のすべての項目に、この名前値が含まれます。
- その他の名前値エレメントには、 colour、 metallic、 capacity、および 消化があります。 これらのエレメントは、配列内のすべてのエンティティーに出現するわけではありません。 これらのエレメントはすべてオプションとして定義されます。 各エレメントでは、「最小オカレンス」プロパティーが 0 に設定されています。

入力から必要な出力に変換するには、For Each 変換を使用して、同じ名前が付けられた (繰り返し) 属性入力オブジェクトから、配列内の各項目を作成します。

- If 条件を定義して、colour:
$attribute2/colourこの式が真と評価されると、If に関連付けられた、ネストされたマップ内の変換が適用されるようにします。 - Else パスには条件は必要ありません。 If 式が false と評価されると、Else に関連付けられたネストされたマップ内の変換が適用されます。

If 変換に関連付けられるネストされたマップは、attributeType エレメントを Paint に設定し、その他のエレメントの値は変更せずにコピーします。

Else に関連付けられるネストされたその他のマップは、attributeType エレメントを Engine に設定し、その他のエレメントの値は変更せずにコピーします。

[{"attributeType":"Paint","colour":"blue","metallic":true},
{"attributeType":"Engine","capacity":1.4E+0,"fuel":"diesel"}]
(0x01000000:Object):JSON = ( ['json' : 0x298f1e00]
(0x01001000:Array):Data = (
(0x01000000:Object):Item = (
(0x03000000:NameValue):attributeType = 'Paint' (CHARACTER)
(0x03000000:NameValue):colour = 'blue' (CHARACTER)
(0x03000000:NameValue):metallic = TRUE (BOOLEAN)
)
(0x01000000:Object):Item = (
(0x03000000:NameValue):attributeType = 'Engine' (CHARACTER)
(0x03000000:NameValue):capacity = 1.4E+0 (FLOAT)
(0x03000000:NameValue):fuel = 'diesel' (CHARACTER)
)
)
)次のタスク
メッセージ・マップ をデプロイし、出力メッセージが有効であることを確認します。 詳しくは、 メッセージ・マップのトラブルシューティングを参照してください。