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.pswp.cn/web/37715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37715.shtml
英文地址,請注明出處:http://en.pswp.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…