Mule 3将中的json对象转换为数组

Mule 3将中的json对象转换为数组,mule,dataweave,anypoint-studio,mule-esb,mel,Mule,Dataweave,Anypoint Studio,Mule Esb,Mel,下面是来自第三方API的动态响应,现在我只需要将特定的JSON对象(“MyValues”)转换为数组 这里的有效载荷非常大 电流输出: { "Body": { "Status": "200", "Result": { "MyValues":{ "Name":"ABC

下面是来自第三方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")


它是单层嵌套对象吗?我的价值观就是。你能在示例输入中再粘贴一点吗?不,它可以是多个,比如有时它显示一条记录,有时它显示3 4或更多,所以如果它是多个,那么[]符号就会出现,但我需要使两个响应一致。对于多个,它会出现“MyValues”:[{“Name”:“ABC测试”,“Phone”:“1234”},{“姓名”:“ABC测试2”,“电话”:“12345”}]上面的内容非常好。现在我想要一条记录,它应该在数组中,以使两者一致。@SalimKhanI不想在DW中定义响应,因为我给出的响应是一个示例,实际响应非常大,我无法定义它。我需要这样一个函数,它将读取响应,如果很好,则将MyValue作为JSON对象读取t然后使其成为一个数组,其他什么都不做。@aledThanks您的解决方案也起作用了,我写了一个简短且有效的解决方案。payload-“MyValues”+{“MyValues”:[payload.MyValues]}当MyValues.Result.MyValues为:object时,否则payload请注意,您的解决方案仅适用于给定的有效载荷结构。