问题描述
我有以下来自第三方 API 的动态响应,现在我只需要将特定的 JSON 对象(“MyValues”)转换为数组。
这里的负载样本非常大。
电流输出:
{
"Body": {
"Status": "200","Result": {
"MyValues":{
"Name":"ABC TEST","Phone":"1234"
}
}
}
}
预期输出:
{
"Body": {
"Status": "200","Result": {
"MyValues":[{
"Name":"ABC TEST","Phone":"1234"
}]
}
}
}
解决方法
您可以使用基于接收类型、数组或对象的模式匹配。我创建了一个递归函数来查找键名的实例并以通用方式执行更改。
示例:
%dw 1.0
%output application/json
%function convertToSingleArray(x,key)
x match {
// OPTIONAL :array -> x map convertToSingleArray($,key),:object -> x mapObject {($$): [$] when ( (($$ as :string) == key) and ((typeOf $) as :string == ":object")) otherwise convertToSingleArray($,key)
},default -> x
}
---
convertToSingleArray(payload,"MyValues")