0

我有一个matches保存到 var 的集合。每个match都有一个gameId。我想用它gameId来进行 API 调用。我使用var
为每个范围设置了一个。matchescounter

<set-variable value="#[payload]" doc:name="Set Matches" doc:id="bb1093b0-3dd9-4515-8f42-dd496f00477b" variableName="matches"/>
<set-variable value="#[[]]" doc:name="Deaths" doc:id="a7341e19-07f8-418d-b39a-5bc415e75fba" variableName="deaths"/>
<foreach doc:name="For each match" doc:id="506fa944-d46f-4684-9c75-73088265ca80" collection="vars.matches" rootMessageVariableName="matches">
    <http:request method="GET" doc:name="GetTimeline" doc:id="63708489-4d10-4e79-b5aa-c8fc723e80c6" config-ref="HTTP_Request_configuration" path="/match/v4/timelines/by-match/{matchId}">
        <http:uri-params ><![CDATA[#[output application/java
---
{
    "matchId" : vars.matches[vars.counter + 1].gameId
}]]]></http:uri-params>
    </http:request>
    <ee:transform doc:name="MapDeaths" doc:id="a6e22968-2229-4574-8cae-44225013b9cf">
        <ee:message>
            <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
    frames: payload.frames map ( frame , indexOfFrame ) -> {
        events: frame.events map ( event , indexOfEvent ) -> vars.deaths + event
    }
}]]></ee:set-payload>
        </ee:message>
    </ee:transform>
</foreach>

然而matchId"matchId" : vars.matches[vars.counter + 1].gameId总是评估为空。我在那里想念什么?
编辑:
我正在使用 Mule 4.2,匹配的 json 结构如下所示:

[
  {
    "matches": [
      {
        "key": "val",
        "key": val,
        ...
      },
      {
        "key": "val",
        "key": val,
        ...
      },
      ...
4

2 回答 2

1

问题似乎是您的有效负载和您使用的表达式不匹配(双关语不是故意的)。有效负载是一个包含对象的数组,具有匹配属性。该表达式显然假定有效负载包含 match 属性,该属性包含 gameId 属性。这就是它返回 null 的原因。

鉴于您没有显示 gameId 在您的示例中,因此意图也不清楚。

让我们尝试一个更详细的示例。

对于输入:

[
  {
    "matches": [
      {
        "keyA": "val1",
        "keyB": "val2"
      },
      {
        "keyC": "val3",
        "keyD": "val4"
      }
    ]
  }
]

表达式payload.matches.keyA返回null

您可以payload[0].matches[0].keyA获取“val1”。

这假设数据来自数组的第一个元素,并且您只想使用其中一个匹配项中的一个键。当然,如果您需要在不同的数组级别上进行迭代,您将需要使用 map 或 group,但这是一个不同的用例。

于 2019-07-15T00:50:34.240 回答
1

设置{matchId}为查询字符串参数并定义请求目标变量,在 dataweave 中使用

在此处输入图像描述

于 2019-07-12T07:52:13.500 回答