【问题标题】:Array of objects to a single object containing all said objects Dataweave对象数组到包含所有所述对象的单个对象 Dataweave
【发布时间】:2021-01-04 20:46:07
【问题描述】:

我正在尝试转换以下对象数组输入:

[
 {
    "Id": "3",
    "Code": "4190484",
    "Expense": "Huge Expense "   
 },
 {
    "Id": "4",
    "Code": "271",
    "Expense": "Big Expense"   
 },
 {
    "Id": "3",
    "Code": "433",
    "Expense": "No Expense"   
 } 
]

到此单个对象的输出:

{
    "Id": "3",
    "Code": "4190484",
    "Expense": "Huge Expense ",
    "Id": "4",
    "Code": "271",
    "Expense": "Big Expense",
    "Id": "3",
    "Code": "433",
    "Expense": "No Expense"
}

您将如何在 Dataweave 中完成此任务?

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    您还可以使用语言的dynamic elements 功能:

    %dw 2.0
    output application/json
    ---
    {(payload)}
    

    就像@aled 在他的回答中解释的那样,您不应该在 JSON 中使用重复的键。

    【讨论】:

    • 这很有趣。我看到它有效,但我不清楚为什么。
    • {(payload)}当一个对象在括号之间有一个表达式时,这意味着括号内的表达式的结果将在上面的对象中展开。这是最好的解决方案
    • 我觉得这个功能需要更多的文档来明确它如何应用于不同的用例。
    • @aled 如果您熟悉的话,它与 javascript 扩展运算符非常相似。但是,是的,我同意 - 文档中没有很好地涵盖它,并且在构建对象/数组时非常有用
    【解决方案2】:

    您可以使用 reduce() 函数,但请注意,在 JSON 中使用重复键取决于实现。我认为在 JSON 中使用重复键是一个糟糕的设计。它可能会导致意想不到的行为。某些实现可能会忽略重复项。例如,DataWeave 将仅返回结果对象的一个​​ Id 为payload.Id

    如果即使在我提到之后你仍然想继续,这是一个例子:

    %dw 2.0
    output application/json
    ---
    // I don't recommend to use duplicate keys
    payload reduce  ((item, acc = {}) -> acc ++ item)
    

    【讨论】:

    • 我只是想找出一种方法来做到这一点。关于重复键的复杂性的好点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多