【问题标题】:Need to convert the payload to the desired output需要将有效载荷转换为所需的输出
【发布时间】:2022-01-18 03:52:49
【问题描述】:

在下面的数组中可以有多个对象,每个对象可以有多个下面提到的键值。我只需要显示 uniqueID 和 name 字段。

[
      {
        "uniqueID": "1",
        "Name": "Annie",
        "Standard": "3",
        "School" : "ABC School"
      },
      {
        "uniqueID": "2",
        "Name": "Apoo",
        "Standard": "4",
        "School" : "PQR School"
      },
      {
        "uniqueID": "3",
        "Name": "Xavier",
        "Standard": "5",
        "School" : "MNO School"
      }
]

期望的输出:

{
    "errors": [
        {
            "uniqueID": "1",
            "Name": "Annie"
        },
        {
            "uniqueID": "2",
            "Name": "Apoo"
        },
        {
            "uniqueID": "3",
            "Name": "Xavier"
        }
    ]
}

【问题讨论】:

    标签: mule dataweave mulesoft anypoint-studio mule4


    【解决方案1】:

    几种方法。

    脚本

    %dw 2.0
    output application/json
    ---
    errors: payload map {
        uniqueID: $.uniqueID,
        Name: $.Name
    }
    
    %dw 2.0
    output application/json
    ---
    errors: payload map {
        ($ - "Standard" - "School")
    }
    

    【讨论】:

    • 第二种方法使用- 删除属性有一个小缺点,因为您需要显式命名每个不需要的属性。如果可能会添加新的不需要的属性,则需要将每个属性显式添加到表达式中。
    • 嗨@Salim,第一种方法有效;谢谢;但是,键值对有 20 多个;我提到的有效载荷只是一个示例。所以,我不能采用第二种方法。
    【解决方案2】:

    除了 Salim Khan 的回答之外,另一种方法是使用 filterObject() 只让输出中的所需属性。优点是如果添加或更改其他属性,它会更加通用。

    %dw 2.0
    output application/json
    var allowedKeydNames=["uniqueID", "Name"]
    ---
    {
        errors: payload map (
            $ filterObject ((value, key, index) ->  (allowedKeydNames contains (key as String)))
        )
    }
    

    【讨论】:

    • 这行得通,谢谢
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多