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}
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合WebClient进行Http远程调用

使用WebClient进行Http远程调用 文章目录 使用WebClient进行Http远程调用1.WebClient对象创建2.WebClient对象抽取config配置3.Get请求url参数设置4.获取ResponseEntity对象5.Post请求测试示例代码 WebClient 一旦创建&#xff0c;就是不可修改的&#xff0c;如果需要设置默认值…

DP:子数组问题

文章目录 引言子数组问题介绍动态规划的基本概念具体问题的解决方法动态规划解法&#xff1a;关于子数组问题的几个题1.最大子数组和2.环形子数组的最大和3.乘积最大子数组4.乘积为正数的最长子数组长度5.等差数列划分 总结 引言 介绍动态规划&#xff08;DP&#xff09;在解决…

音视频开发31 FFmpeg 编码- avcodec_find_encoder和avcodec_find_encoder_by_name

avcodec_find_encoder /** * Find a registered encoder with a matching codec ID. * * param id AVCodecID of the requested encoder * return An encoder if one was found, NULL otherwise. */ AVCodec *avcodec_find_encoder(enum AVCodecID id); 那么这个 AVCodec…

14分Top刊NC代码开源|NSCLC单细胞+空转肿瘤微环境分析

说在前面 说起肺癌真的过去回忆历历在目&#xff0c;小编毕业后职业生涯的第一个项目——非小细胞肺癌预后有效靶点筛选。当时肝的是转录组预后建模筛选。 做研发其实要求是远远高于发文章的&#xff0c;文章投不出去就降分&#xff0c;加工作量&#xff0c;做药要是烂尾或者…

2024年7月1日 (周一) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键&#xff0c;实现一键唤起、一键隐藏的 Windows 工具&#xff0c;并且支持窗口动态绑定快捷键&#xff08;无需设置自动实现&#xff09;。 喜马拉雅下载工具: 字面意思 《星刃》早期概念图分享 末世破败环境推主Genki分享了《星…

Spire.PDF for .NET【文档操作】演示:在 PDF 中创建目录 (TOC)

目录在增强文档的可读性和可导航性方面起着至关重要的作用。它为读者提供了文档结构的清晰概述&#xff0c;使他们能够快速找到并访问他们感兴趣的特定部分或信息。这对于较长的文档&#xff08;例如报告、书籍或学术论文&#xff09;尤其有价值&#xff0c;因为读者可能需要多…

部署calico网络插件

部署calico网络插件 之前的k8s环境中主要使用了flannel作为网络插件&#xff0c;这次改用calico。calico支持多种安装方式&#xff0c;以下是具体的操作步骤。 1. 准备工作 环境信息 # 系统信息 rootmaster1:~# cat /etc/issue Ubuntu 24.04 LTS \n \lrootmaster1:~# uname…

MyBatisPlus 常用的注解 表映射 主键映射 字段映射

介绍 官网&#xff1a;https://baomidou.com/reference/annotation/ 指定映射表 实体类使用驼峰命名&#xff0c;表名应为xx_xxx等格式这样才可以映射&#xff0c;但是实际开发过程中可能不一致就可以使用该方法处理。 Data TableName("employee_235") //映射的表…

求质数题目

//需求:键盘录入一个正整数x&#xff0c;判断该整数是否为一个质数。 //质数: //如果一个整数只能被1和本身整除&#xff0c;那么这个数就是质数。否则这个数叫做合数 package Base_se.Base_701;import java.util.Scanner;/*** author gyf* ClassName test* Date 2024/7/1 19:…

Linux启动elasticsearch,提示权限不够

Linux启动elasticsearch&#xff0c;提示权限不够&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a; 设置文件所有者&#xff0c;即使用户由权限访问文件 sudo chown -R 用户名[:新组] ./elasticsearch-8.10.4 //切换到elasticsearch-8.10.4目录同级 chown详细格式…

银行家算法-操作系统中避免死锁的最著名算法

背景 有很多文章都会介绍银行家算法。在百度和CSDN上搜一搜能搜出很多来。很多同学会觉得这个算法很深奥&#xff0c;有些文章写的又很复杂&#xff0c;其实真的很简单。这里简单记录一下基本原理&#xff0c;然后大家再配合其他文章看&#xff0c;就能加深理解。 算法原理 …

LLaVA1.5训练数据和时间分析

LLaVA的PT+SFT训练_llava sft-CSDN博客文章浏览阅读379次。这个阶段,使用8个A100(80G)训练LLaVA-v1.5-13B大约需要20h。全量微调,非lora跑不起来啊,以前一直用swift,llama-factory这种框架式的代码库,但用原作者开源的代码也是有很多好处的。在这个阶段,使用 8 个 A100(…

Oracle中 ROW_NUMBER()的语法及在对应不同需求下应如何使用

Oracle数据库中的ROW_NUMBER()函数是一个窗口函数&#xff0c;它为查询结果集中的每一行分配一个唯一的序号。这个函数在数据分析、分页查询、数据去重和排名问题等方面非常有用。ROW_NUMBER()函数的语法如下&#xff1a; ROW_NUMBER() OVER ( [ PARTITION BY column ] ORDER …

3.用户程序与驱动交互

驱动程序请使用第二章https://blog.csdn.net/chenhequanlalala/article/details/140034424 用户app与驱动交互最常见的做法是insmod驱动后&#xff0c;生成一个设备节点&#xff0c;app通过open&#xff0c;read等系统调用去操作这个设备节点&#xff0c;这里先用mknode命令调…

64.WEB渗透测试-信息收集- WAF、框架组件识别(4)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;63.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;3&#xff09;-CSDN博客 我们在…

【FedMut】Generalized Federated Learning via Stochastic Mutation

基于随机变异的泛化联邦学习 来源&#xff1a;AAAI2024 Abstract 问题&#xff1a; FedAvg 将相同的全局模型派发给客户端进行本地训练&#xff0c;容易陷入尖锐解&#xff0c;导致训练出性能低下的全局模型 提出 FedMut&#xff1a; 本文提出了一种名为 FedMut 的新型FL方法…

2024免费的股票数据接口API

沧海数据 # Restful API https://tsanghi.com/api/fin/stock/{exchange_code}/realtime?token5dbb47113a4a43a6be1755673ce854db&ticker{ticker} 数据来源&#xff1a;沧海数据 请求方式&#xff1a;Get 数据格式&#xff1a;标准Json格式[{},...{}]

如何借用物联网快速实现高标准农田信息化

如何借用物联网快速实现高标准农田信息化 高标准农田信息化&#xff0c;作为现代农业发展的重要基石&#xff0c;是指在建设高产、稳产、节水、环保的农田基础上&#xff0c;深度融合现代信息技术&#xff0c;实现农田管理的精准化、智能化和高效化。物联网&#xff08;Intern…

vue3+ts实现计算两个字符串的相似度

在TypeScript中&#xff0c;可以使用Levenshtein莱文斯坦距离算法来精确匹配两个字符串的相似度百分比。Levenshtein距离是指两个字符串之间&#xff0c;由一个转换成另一个所需的最少编辑操作次数&#xff0c;这里的编辑操作包括插入、删除、替换。 /*** Levenshtein距离算法…

Linux Static calls机制

文章目录 前言一、简介二、Background: indirect calls, Spectre, and retpolines2.1 Indirect calls2.2 Spectre (v2)2.3 RetpolinesConsequences 2.4 Static callsHow it works 三、其他参考资料 前言 Linux内核5.10内核版本引入新特性&#xff1a;Static calls。 Static c…