如何将对象数组转换为字符串数组而不丢失Dataweave中的键?

时间:2018-10-30 01:48:48

标签: mule dataweave

嗨,我需要转换以下JSON对象:

const

我正在尝试用每个具有数组值的属性来对其进行转换,其中它们的值是codeValue,并且是这些字符串值的数组。

这是所需的输出:

{
  "products": [
    {
      "itemno": "123131",
      "description" : "Big Widget",
      "attributes": [
        {
          "color": [
            {
              "value": "Red",
              "codeValue": "RED_NO2"
            },
            {
              "value": "Blue Licorice",
              "codeValue": "BLUE-355"
            }
          ]
        },
        {
          "chemicals": [
            {
              "value": "Red Phosphorous",
              "codeValue": "RED_PHOS"
            },
            {
              "value": "Chlorine Bleach",
              "codeValue": "CHLRN_BLCH"
            }
          ]
        }
      ]
    }
  ]
}

这是Dataweave。我无法确定如何获取属性名称(即颜色,化学物质作为具有所需数据的键)。

关于使用Dataweave转换数据的例子很多,我花了很多时间试图弄清楚这一点。

这是某种实现的数据编织之一,但不是解决方案:

{
  "products": [
    {
      "itemno": "123131",
      "description: : "Big Widget",
      "attributes": [
        {
          "color": ["RED_NO2", "BLUE-355"]
        },
        {
          "chemicals": ["RED_PHOS", "CHLRN_BLCH"]
        }
      ]
    }
  ]
}

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

%dw 1.0
%output application/json

%function attributeCodeValues(attributes)
  attributes map ((attr) -> 
    attr mapObject ((values, descriptor) ->
      {
        (descriptor): values map $.codeValue
      }
    )
  )
---
payload.products map {
    "ItemNo" : $.sku,
    "Desc" : $.description,
    "Test" : "Value",
    "Attributes" : attributeCodeValues($.attributes)
}