[英]Map an additional key-value in a specific index of a json array using Dataweave 2.0
我有一個輸入有效負載(json 數組),需要在特定索引中使用鍵值進行充實。 我的要求是將額外的鍵值(所有對象都相同)放在索引 1 處,所以我設法這樣做了:
輸入載荷:
[
{
"key1": "value1",
"key3": "value3",
"key4": "value4",
"key5": "value5"
},
{
"key1": "value1",
"key3": "value3",
"key4": "value4",
"key5": "value5"
},
{
"key1": "value1",
"key3": "value3",
"key4": "value4",
"key5": "value5"
}
]
腳本:
%dw 2.0
output application/json
---
payload map (
($)[&0] ++ {"key2": "value2"} ++ ($ - "key1")
)
Output:
[
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
},
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
},
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
}
]
我的問題是:如何動態地實現這一點?
謝謝,馬可
請嘗試以下腳本。 我們聲明了一個變量並將其添加到輸入數組的每個 object 中。 如果此鍵值是從有效負載或任何資源中獲取的,則您也可以根據要求在設置變量中聲明此變量。
%dw 2.0
output application/json
var keyValue = {
"key2": "value2"
}
---
payload map ((item, index) -> (item) ++ keyValue ) map ((item1, index) ->(item1) mapObject ((value, key, index) ->((key):value ) ) orderBy ((value, key) ->value ))
另一種選擇,你只需要給出一個索引位置(.g,2或3或4根據要求)來添加鍵值
%dw 2.0
output application/json
fun addKeyAtPosition(in : Object, position : Number,keyValue : Object)=(
sizeOf(in) match {
case size if(position <=0 ) -> (keyValue ++ in)
case size if(position > size) -> (in ++ keyValue)
case size if(position <= size) -> (in mapObject ((value, key, index) ->
(if ((index+1) == position)
keyValue ++ ((key): value)
else ((key): value))
))
else -> keyValue ++ in
}
)
var keyValue= {
"key2": "value2"
}
---
payload map ((item, index) ->
addKeyAtPosition(item,2,keyValue) // here we are passing the index as 2
)
數據中心
%dw 2.0
output application/json
var k=keysOf(payload[0])
---
payload map(item,index)-> (
[(item[&0])] ++ [{"key2": "value2"}] ++ (k[1 to -1] map ($): (item[$]))
) reduce($$++$)
Alternatitevely 您可以使用MinusMinus刪除元素
%dw 2.0
output application/json
---
payload map (
($)[&0] ++ {"key2": "value2"} ++ ($ -- (($)[&0]))
)
Output
[
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
},
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
},
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
}
]
首先我會刪除密鑰以防它已經存在,然后動態添加新的密鑰對。 如果您確定該鍵以前不存在於輸入元素中,則可以省略刪除操作。
%dw 2.0
output application/json
var key="key2"
var value="value2"
---
payload map (
$ - key ++ {(key): value}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.