4

我有一个类似于下面粘贴的 JSON。我正在尝试提取每个单独的记录并将其推送到队列中。我将如何提取 Mule 中的每条记录?我一直在尝试使用集合拆分器和 foreach 循环,但我不知道如何让它工作。

{
  "locations": {
    "record": [
      {
        "id": 8817,
        "loc": "NEW YORK CITY"
      },
      {
        "id": 2873,
        "loc": "UNITED STATES"
      },
      {
        "id": 1501,
        "loc": "NEW YORK STATE"
      }
    ]
  }
}
4

3 回答 3

5

去做这个:

  1. 将 JSON 实体转换为 Java 结构的层次结构
  2. 提取record列表
  3. 拆分列表

现在在 Mule XML 配置中:

<json:json-to-object-transformer returnClass="java.util.Map" />
<expression-transformer expression="#[payload.locations.record]" />
<collection-splitter />
<!-- TODO: dispatch to queue -->
于 2012-10-01T20:59:34.530 回答
1

试试这个,而不是 Map put List。这对我来说很好。

<json:json-to-object-transformer returnClass="java.util.List" />
<expression-transformer expression="#[message.payload.locations.record]" />
<collection-splitter />
于 2014-02-24T08:29:00.413 回答
1

我正在添加另一种解决方案,其中 returnClass="java.util.Map" 有效,请查看代码,您可以在从 Fiddler 或 POST 客户端发送数据时使用 http 方法将相同的 JSON 放入正文中作为 POST。

在此流程中,我直接在拆分器中分配表达式,而不是使用表达式转换器。我正在使用 Any Point Studio 使其工作。

    <flow name="mule-splitterFlow2" doc:name="mule-splitterFlow2">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="splitterjson"/>
        <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
        <splitter expression="#[message.payload.locations.record]" doc:name="Splitter">
        </splitter>
        <logger level="INFO" doc:name="Logger" message="#[message.payload]"/>
    </flow>

于 2014-12-02T14:00:18.720 回答