大家好,我正在尋找資料編織 2.0 邏輯中問題的解決方案或想法
問題是如果字串超過最大長度,則將字串轉換為多個陣列
最大長度為 8
{"message" : "hello this is Muley"}
expected output is
{
"message": ["hello", "this is", "muley"]
}
我已經嘗試使用地圖和臨時變數來存盤值,但它給出了一個空陣列
%dw 2.0
output application/json
var tmp=[[]]
var max=8
fun ck(tmp,data)=
(
if(sizeOf((tmp[-1] joinBy (" ") default "") " " data) <= max )
(tmp[-1] << data)
else
tmp << [data]
)
var msd=(payload.message splitBy(" ") map(item, value) -> (ck(tmp, item)))
---
{"message": tmp map()-> $ joinBy " "}
輸出是
{
"message": [ "" ]
}
uj5u.com熱心網友回復:
由于空間條件,它有些復雜。為了清楚起見,我試圖將其封裝到函式中。
%dw 2.0
output application/json
import * from dw::core::Strings
import * from dw::core::Arrays
fun findNextSpace(s, max)=do {
var spaces = find(s, " ")
var overIndex=spaces indexWhere ($ > max - 1)
var firstSpaceBeforeMax = spaces[if (overIndex > 0) (overIndex - 1) else -1]
---
firstSpaceBeforeMax
}
fun splitMax(data, max)=
if (sizeOf(data) >= max)
flatten([data[0 to findNextSpace(data, max) - 1],splitMax(data[findNextSpace(data, max) 1 to -1], max) ])
else
data
---
{
message: splitMax(payload.message, 8)
}
我不確定您是否知道 DataWeave 是一種變數不可變的函式式語言。無法修改“臨時”變數,只能回傳新值。我使用遞回函式來實作結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315487.html
上一篇:將地址轉換為指標的問題
