LoginSignup
0
0

More than 1 year has passed since last update.

Mulesoft: DataWeaveのjoin句で2つのjsonを結合する

Posted at

Mule APIでは2つのjsonを結合することができる

Mule APIの最大の利点は複数のデータベースからデータを取得し、Mule上で一つのjsonにまとめ、APIのレスポンスとして返せることです。以下のように二つのデータベースからの取得結果を一つのjsonにまとめるTransform Messageコンポーネントをこの記事で紹介します。

image.png

Transform MessageコンポーネントのDataweaveを以下のように記述します。

%dw 2.0
output application/json
import every,join from dw::core::Arrays
var oracleData= 
[
    {
      "id": "456",
      "depositdate": "2023/4/1",
      "clntNameKana": "鈴木太郎"
    },
    {
      "id": "457",
      "depositdate": "2023/4/2",
      "clntNameKana": "佐藤太郎"
    }
]
var mysqlData= 
[
    {
      "id": "456",
      "transferamount": "10000",
      "accountname": "89998"
    },
    {
      "id": "457",
      "transferamount": "20000",
      "accountname": "90000"
    }
]
var result = join(oracleData, mysqlData, (oracleData) -> oracleData.'id', (mysqlData) -> mysqlData.'id') default []          
fun transformFunction(data): Array =
	{	
		id: data."l"."id",
		depositdate: data."l"."depositdate",
		transferamount: data."r"."transferamount",
		accountname: data."r"."accountname",
		clntNameKana: data."l"."clntNameKana"
	}
---
result map ((item, index) -> transformFunction(item))

上記のDataWeave記述の説明です。
mysqlData変数にmysqlデータベースからの取得結果となるjson、oracleData変数にoracleデータベースからの取得結果となるjsonが格納されています。

Dataweaveのjoin関数を使ってoracleDataとmysqlDataをid項目で結合します。joinを使うと二つのjsonを、指定の同じ項目で内部結合することができます。join すると以下のネストされたjsonがresult変数に格納されます。

[
  {
    "l": {
      "id": "456",
      "depositdate": "2023/4/1",
      "clntNameKana": "鈴木太郎"
    },
    "r": {
      "id": "456",
      "transferamount": "10000",
      "accountname": "89998"
    }
  },
  {
    "l": {
      "id": "457",
      "depositdate": "2023/4/2",
      "clntNameKana": "佐藤太郎"
    },
    "r": {
      "id": "457",
      "transferamount": "20000",
      "accountname": "90000"
    }
  }
]

result変数はネストされたjsonになっているため、こちらをtransformFunction関数を定義し一つのjsonにします。駆動jsonとなる"l"からはidを取得し、結合されたjsonとなる"r"からはaccountnameを取得して一つのマップ(json)を定義しています。transformFunction関数にresult変数のjsonを渡すと以下のように一つのjsonが返されます。

[
  {
    "id": "456",
    "depositdate": "2023/4/1",
    "transferamount": "10000",
    "accountname": "89998",
    "clntNameKana": "鈴木太郎"
  },
  {
    "id": "457",
    "depositdate": "2023/4/2",
    "transferamount": "20000",
    "accountname": "90000",
    "clntNameKana": "佐藤太郎"
  }
]

簡単にDataWeaveを実行しシミュレーションしたい場合 https://dataweave.mulesoft.com/learn/dataweave 
が便利です。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0