【问题标题】:How to use for loop in Dataweave?如何在 Dataweave 中使用 for 循环?
【发布时间】:2022-01-26 22:33:50
【问题描述】:

我需要将给定的有效负载翻译成 6 种不同的语言(我使用了翻译 API),我只使用以下代码翻译了一种语言:

%dw 2.0
output application/json
---
{
    "text": [payload],
    "source": "en",
    "target": "et"
}

输入有效负载:

"A quitter never wins and a winner never quits"

输出:

{
  "translations": [
    {
      "translation": "Kui sul on unistused, siis on sinu kohustus need teoks teha."
    }
 ],
  "word_count": 13,
  "character_count": 65
}

【问题讨论】:

  • “翻译”属性的输入来自哪里?您共享的脚本似乎生成了用于调用“翻译 API”的输入。目前尚不清楚您到底要什么,以及为什么您提出有关使用 for 循环的问题,DataWeave 没有。调用 API 不是您在 DataWeave 中执行的操作。请阅读stackoverflow.com/help/how-to-ask,了解如何改进您的问题。

标签: foreach translate dataweave mule4


【解决方案1】:

DataWeave 是一种专门用于转换数据的函数式语言。它没有“for循环”结构。它确实有一个map() 函数,可用于转换数组。我了解您希望针对不同语言执行相同的 API 请求。为此,您应该使用 Foreach scope 来处理 Mule 中的流程。您可以将两者结合起来,使用 map() 为每种语言创建一个请求数组,并使用 Foreach 范围迭代请求输入列表并执行实际请求。

随机选择语言的示例:

<set-payload value="A quitter never wins and a winner never quits"/>
<set-variable variableName="languages" value="#[ ['en', 'et', 'ru', 'nl', 'pl', 'it'] ]"/>
<ee:transform doc:name="Transform Message">
    <ee:message >
        <ee:set-payload ><![CDATA[%dw 2.0
            output application/java
            ---
            vars.languages map 
                { "text": [payload], "source": "en", "target": $ }  
        ]]>
        </ee:set-payload>
    </ee:message>
</ee:transform>
<foreach doc:name="For Each">
    <logger message="sending request to translate: #[payload]"/>
    <!-- call the translation API -->
</foreach>

记录器输出将是:

sending request to translate: {text=[A quitter never wins and a winner never quits], source=en, target=en}
sending request to translate: {text=[A quitter never wins and a winner never quits], source=en, target=et}
sending request to translate: {text=[A quitter never wins and a winner never quits], source=en, target=ru}
sending request to translate: {text=[A quitter never wins and a winner never quits], source=en, target=nl}
sending request to translate: {text=[A quitter never wins and a winner never quits], source=en, target=pl}
sending request to translate: {text=[A quitter never wins and a winner never quits], source=en, target=it}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2019-01-06
    • 2014-11-01
    • 1970-01-01
    • 2017-05-24
    • 2018-12-14
    相关资源
    最近更新 更多