我有一个对象数组,其中包含创建后的产品 ID 和产品名称,但该数组可能包含未成功创建的产品,并且它返回创建具有失败属性的产品之前的原始负载:
[
{
"product_name":"",
"product_id":"1"
},
{
"product_name":"",
"product_id":"2"
},
{
"failed_products":[
{
"product_id":"3",
"attribute_1":"Error in value: attribute_1",
"attribute_2":""
},
{
"product_id":"4",
"attribute_1":"Error in value: attribute_1",
"attribute_2":"Error in value: attribute_2"
}
]
}
]
我必须返回成功产品的对象数组以及失败的产品,并给出它们在名为“错误”的属性上失败的原因:
预期输出:
[
{
"product_name":"",
"product_id":"1",
"error":""
},
{
"product_name":"",
"product_id":"2",
"error":""
},
{
"product_name":"",
"product_id":"3",
"error":"Error in value: attribute_1"
},
{
"product_name":"",
"product_id":"2",
"error":"Error in value: attribute_1 and Error in value: attribute_2"
}
]
如何构建最终响应?
将问题分解成各个部分。首先分别处理失败和未失败的属性。然后映射每个元素以添加或修改其属性以匹配预期输出。假设失败产品中除product_id之外的所有属性都是错误属性(您可以使用filterObject()代替),我们只需获取它们的值列表并将它们连接起来。
%dw 2.0
output application/json
---
payload
filter !(namesOf($) contains "failed_products")
map ($ ++ {error:""})
++
(payload
filter (namesOf($) contains "failed_products")
flatMap (
$.failed_products map((item) -> {
product_name: "",
product_id: item.product_id,
error: valuesOf(item - "product_id") filter !(isEmpty($)) joinBy " and "
})
)
)
输出:
[
{
"product_name": "",
"product_id": "1",
"error": ""
},
{
"product_name": "",
"product_id": "2",
"error": ""
},
{
"product_name": "",
"product_id": "3",
"error": "Error in value: attribute_1"
},
{
"product_name": "",
"product_id": "4",
"error": "Error in value: attribute_1 and Error in value: attribute_2"
}
]