Mule 3 将 json 对象转换为数组

问题描述

我有以下来自第三方 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")