Dataweave2 语法教程

DataWeave 是 MuleSoft 的数据语言,专门用于数据转换和映射。在 MuleSoft 的 Anypoint Platform 中,它是数据集成的一部分。下面是一个 DataWeave 语法教程,涵盖基本的语法和用法。

基本语法

DataWeave 脚本分为三个部分:%dw 声明、output 指令和数据转换表达式。

%dw 2.0
output application/json
---
{
  message: "Hello, World!"
}
  • %dw 2.0:指定 DataWeave 版本。

  • output application/json:指定输出格式。

  • ---:表示数据转换表达式的开始。

数据类型

DataWeave 支持多种数据类型,包括:

  • String

  • Number

  • Boolean

  • Array

  • Object

  • Null

示例

%dw 2.0
output application/json
---
{
  string: "Hello",
  number: 123,
  boolean: true,
  array: [1, 2, 3],
  object: { key: "value" },
  nullValue: null
}

操作符

算术操作符
  • +
  • -
  • *
  • /
  • % 取模
逻辑操作符
  • &&
  • ||
  • !
比较操作符
  • == 等于
  • != 不等于
  • < 小于
  • > 大于
  • <= 小于等于
  • >= 大于等于

示例

%dw 2.0
output application/json
---
{
  addition: 1 + 2,
  multiplication: 3 * 4,
  comparison: 5 > 3,
  logical: true && false
}

函数

DataWeave 提供了丰富的内置函数,可以进行各种数据转换操作。

常用函数
  • sizeOf:返回数组或字符串的长度。
  • upper:将字符串转换为大写。
  • lower:将字符串转换为小写。
  • trim:移除字符串两端的空白字符。
  • joinBy:将数组元素用指定字符连接成字符串。

示例

%dw 2.0
output application/json
---
{
  size: sizeOf("Hello"),
  upper: upper("hello"),
  lower: lower("HELLO"),
  trimmed: trim("  hello  "),
  joined: joinBy(["a", "b", "c"], "-")
}

数组和对象操作

映射 (map)

map 函数用于将数组中的每个元素转换为另一个值。

%dw 2.0
output application/json
---
[1, 2, 3] map ((item) -> item * 2)
过滤 (filter)

filter 函数用于过滤数组中的元素。

%dw 2.0
output application/json
---
[1, 2, 3, 4, 5] filter ((item) -> item % 2 == 0)
访问对象属性

可以通过点符号或方括号访问对象属性。

%dw 2.0
output application/json
---
{
  obj: { a: 1, b: 2 },
  valueA: payload.obj.a,
  valueB: payload.obj["b"]
}

条件语句

if-else

可以使用 if-else 进行条件判断。

%dw 2.0
output application/json
---
{
  result: if (sizeOf("hello") > 3) "long" else "short"
}
match

match 语句类似于 switch-case 结构。

%dw 2.0
output application/json
---
{
  sizeCategory: sizeOf("hello") match {
    case size when size < 5 -> "small"
    case size when size < 10 -> "medium"
    else -> "large"
  }
}

完整示例

1. xml转Json

将 XML 数据转换为 JSON,并进行一些数据处理。

输入数据 (XML)
<orders>
    <order>
        <id>1</id>
        <item>Apple</item>
        <quantity>5</quantity>
    </order>
    <order>
        <id>2</id>
        <item>Banana</item>
        <quantity>10</quantity>
    </order>
</orders>
DataWeave 脚本
%dw 2.0
output application/json
---
payload.orders order map {
  orderId: order.id,
  product: upper(order.item),
  amount: order.quantity as Number
}
输出数据 (JSON)
[
  {
    "orderId": "1",
    "product": "APPLE",
    "amount": 5
  },
  {
    "orderId": "2",
    "product": "BANANA",
    "amount": 10
  }
]

2. 数组合并

假设有以下 JSON 对象,其中包含用户信息和用户语文成绩的数组:

输入数据
{
  "users": [
    { "id": 1, "name": "Alice" },
    { "id": 2, "name": "Bob" },
    { "id": 3, "name": "Charlie" }
  ],
  "scores": [
    { "userId": 1, "chinese": 85 },
    { "userId": 2, "chinese": 90 },
    { "userId": 3, "chinese": 78 }
  ]
}
DataWeave 脚本

下面是 DataWeave 脚本,通过用户 ID 匹配两个数组,并将结果整合成一个新的 JSON 数组:

%dw 2.0
output application/json
var users = payload.users
var scores = payload.scores
---
users map (user) -> {
  id: user.id,
  name: user.name,
  chinese: (scores filter ((score) -> score.userId == user.id)).chinese[0] // 提取匹配的语文成绩
}
输出数据
[
  {
    "id": 1,
    "name": "Alice",
    "chinese": 85
  },
  {
    "id": 2,
    "name": "Bob",
    "chinese": 90
  },
  {
    "id": 3,
    "name": "Charlie",
    "chinese": 78
  }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值