[英]Dataweave XML to JSON creating key pair value based on attribute in xml
[英]Dataweave: Filter XML payload based on staring value starting with specific character
我有一個輸入 XML,其中包含供應商列表和一些其他數據。 輸入 XML 如下所示:
<screenFields>
<ScreenFieldDTO>
<fieldName>SUPP1</fieldName>
<value>123</value>
</ScreenFieldDTO>
<ScreenFieldDTO>
<fieldName>MAKE1</fieldName>
<value>ABC</value>
</ScreenFieldDTO>
<ScreenFieldDTO>
<fieldName>SUPP2</fieldName>
<value>234</value>
</ScreenFieldDTO>
<ScreenFieldDTO>
<fieldName>NORM2</fieldName>
<value>TXT2</value>
</ScreenFieldDTO>
<ScreenFieldDTO>
<fieldName>SUPP3</fieldName>
<value>124</value>
</ScreenFieldDTO>
</screenFields>
我想過濾此 XML 以訪問以“SUPP”開頭的字段名稱的值。 我知道 dataweave 中的過濾器可以比較整個值,但我需要過濾包含特定字符串的字段名稱。
映射看起來像:
%dw 2.0
output application/json
fun filterSupplier(val) = if(val startsWith("SUPP")) "SUPP" else ""
---
{
"fieldname": payload.screenFields.*ScreenFieldDTO filter $.fieldName ==
(filterSupplier($.fieldName))
}
預期的響應是:
{
[
{"fieldname" : "SUPP1", "value": "123"},
{"fieldname" : "SUPP2", "value": "234"},
{"fieldname" : "SUPP3", "value": "124"}
]
}
響應是空白的。 這段代碼有什么問題?
您使用的腳本對於過濾器來說過於復雜。 filter()
只需要一個返回 true 或 false 的表達式,因此簡單的filter ($.fieldName startsWith("SUPP"))
將起作用並更清楚地表達意圖。
我假設預期的 output 是一個數組。 我還會添加一個 map 以將數組的每個元素中的鍵名稱更改為預期的 output 中的fieldname
名稱。
%dw 2.0
output application/json
---
payload.screenFields.*ScreenFieldDTO
filter ($.fieldName startsWith("SUPP"))
map {"fieldname": $.fieldName }
Output:
[
{
"fieldname": "SUPP1"
},
{
"fieldname": "SUPP2"
},
{
"fieldname": "SUPP3"
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.