フラット化された配列要素

DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

DataWeave では、DataWeave オブジェクト、配列、またはサブ配列において、配列のサブ配列やキー/値ペアのコレクションをフラット化できます。 開始する前に、DataWeave バージョン 2 (​%dw 2.0​) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave 1.0 (​%dw 1.0​) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。

キー/値ペアを持つサブ配列のオブジェクト配列へのフラット化

次の例では、​flatten​ を使用して、変数 ​arrayOne​ で定義される入力配列のキー-値ペアをフラット化しています。配列内のすべてのキー/値ペアは個別の DataWeave オブジェクトになります。

この例では、次の関数を使用します。

  • flatten​ は、サブ配列の要素を親配列に移動して、サブ配列を除去し、すべてのキー/値ペアを親配列内のオブジェクトのリストに変換します。

DataWeave:
%dw 2.0
var arrayOne = [
                 [
                    "keyOne" : 1,
                    "keyTwo" : 2
                 ],
                 [
                    "keyThree" : 3,
                    "keyFour" : 4,
                    "keyFive" : 5
                 ],
                 "keySix" : 6
               ]
output application/json
---
flatten(arrayOne)
出力 JSON:
[
  {
    "keyOne": 1
  },
  {
    "keyTwo": 2
  },
  {
    "keyThree": 3
  },
  {
    "keyFour": 4
  },
  {
    "keyFive": 5
  },
  {
    "keySix": 6
  }
]

組み合わせた配列のフラット化

上の DataWeave の例と同じように、次の例は、2 つの配列の要素を組み合わせてフラット化します。この 2 番目の例では、セレクター ​fruit​ を使用してキー ​fruit​ の値のみを選択し、配列内の他の値は除外します。

この例では、以下を使用します。

  • ++​ は、2 つの配列 (​arrayOne​ と ​arrayTwo​) のオブジェクトを 1 つの配列に組み合わせます。

  • flatten​ は、組み合わせた配列を、キー/値ペアのリストとしてフラット化します。

DataWeave:
%dw 2.0
var arrayOne = [
                  [
                     "fruit" : "orange",
                     "fruit" : "apple"
                  ],
                  [
                     "fruit" : "grape",
                     "notfruit" : "something else"
                  ]
               ]
var arrayTwo = [
                  [
                  	{  "fruit" : "kiwi" }
                  ],
                  "fruit" : "strawberry",
                  "fruit" : "plum",
                  { "fruit" : "banana" },
                  "notfruit" : "something else"
               ]
output application/json
---
flatten(arrayOne ++ arrayTwo)
出力 JSON:
[
  { "fruit": "orange" },
  { "fruit": "apple" },
  { "fruit": "grape" },
  { "notfruit": "something else" },
  { "fruit": "kiwi" },
  { "fruit": "strawberry" },
  { "fruit": "plum" },
  { "fruit": "banana" },
  { "notfruit": "something else" }
]

上の例​と次の例の唯一の違いは、​.fruit​ セレクターを本文の式に追加して、​fruit​ 値をすべて選択し、​notfruit​ キーの値を出力配列から除外しているという点です。

DataWeave:
%dw 2.0
var arrayOne = [
                  [
                     "fruit" : "orange",
                     "fruit" : "apple"
                  ],
                  [
                     "fruit" : "grape",
                     "notfruit" : "something else"
                  ]
               ]
var arrayTwo = [
                  [
                  	{  "fruit" : "kiwi" }
                  ],
                  "fruit" : "strawberry",
                  "fruit" : "plum",
                  { "fruit" : "banana" },
                  "notfruit" : "something else"
               ]
output application/json
---
flatten(arrayOne ++ arrayTwo).fruit
出力 JSON:
[
  "orange",
  "apple",
  "grape",
  "kiwi",
  "strawberry",
  "plum",
  "banana"
]

次の例では、本文の式で ​.fruit​ ではなく ​..*fruit​ をセレクターとして使用し、ネストされているすべての ​fruit​ 値を、フラット化した配列に返しています。また、2 つではなく 3 つの配列を組み合わせてフラット化しています。

DataWeave:
%dw 2.0
var arrayOne = [
                  [
                     "fruit" : "orange",
                     "fruit" : "apple"
                  ],
                  [
                     "fruit" : "grape",
                     "notfruit" : "something else"
                  ]
               ]
var arrayTwo = [
                  [
                  	{  "fruit" : "kiwi" }
                  ],
                  "fruit" : "strawberry",
                  "fruit" : "plum",
                  { "fruit" : "banana" },
                  "notfruit" : "something else"
               ]
var arrayThree = [
                    { parentOne :
                        [
                     	     { child :
                     	       [
                     	         { grandchild :
                                   {
                                      "fruit" : "watermelon",
                                      "notfruit" : "something else"
                                   }
                                },
                                {
                                   fruit : "cantaloupe",
                                   "notfruit" : "something else"
                                }
                             ]
                           },
                           {
                              fruit : "honeydew",
                              "notfruit" : "something else"
                           }
                        ]
                    },
                    { parentTwo:
                     	  [
                     	  	 fruit : "cherry",
                     		   "notfruit" : "something else"
                     	  ]
                    }
                 ]
output application/json
---
flatten(arrayOne ++ arrayTwo ++ arrayThree)..*fruit
出力 JSON:
[
  "orange",
  "apple",
  "grape",
  "kiwi",
  "strawberry",
  "plum",
  "banana",
  "watermelon",
  "cantaloupe",
  "honeydew",
  "cherry"
]

親配列へのサブ配列のフラット化

次の例では、​flatten​ 関数をさまざまなデータ型 (数値、DataWeave オブジェクト、サブ配列、文字列、​null​ 値、キー/値ペア) に対して使用しています。サブ配列の要素は親配列の要素になり、サブ配列は除去されます。

この例では、次の関数を使用します。

  • flatten​ は、サブ配列をフラット化して親配列に含めます。

DataWeave:
%dw 2.0
var myArray = [
                 1,
                 [2,3],
                 { a : "b"},
                 "my string",
                 [ [4,5], { c : "d"}, 6 ],
                 null,
                 "e" : "f"
              ]
output application/json
---
flatten(myArray)
出力 JSON:
[
  1,
  2,
  3,
  {
    "a": "b"
  },
  "my string",
  [
    4,
    5
  ],
  {
    "c": "d"
  },
  6,
  null,
  {
    "e": "f"
  }
]