骡子集合分离器与JSON

时间:2012-10-01 20:36:44

标签: arrays json mule splitter

我有一个看起来像下面粘贴的JSON。我试图提取每个单独的记录并将其推送到队列中。我如何提取骡子中的每条记录?我一直在尝试使用集合拆分器和foreach循环,但我无法弄清楚如何让它工作。

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

3 个答案:

答案 0 :(得分:5)

要做到这一点:

  1. 将JSON实体转换为Java结构层次结构
  2. 提取record列表
  3. 拆分列表
  4. 现在在Mule XML配置中:

    <json:json-to-object-transformer returnClass="java.util.Map" />
    <expression-transformer expression="#[payload.locations.record]" />
    <collection-splitter />
    <!-- TODO: dispatch to queue -->
    

答案 1 :(得分:1)

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

<json:json-to-object-transformer returnClass="java.util.List" />
<expression-transformer expression="#[message.payload.locations.record]" />
<collection-splitter />

答案 2 :(得分:1)

我正在添加一个其中returnClass =“java.util.Map”工作的解决方案请看一下代码,在这个代码中,您可以使用http方法将相同的JSON放入正文中,同时从Fiddler或POST发送数据男人客户。

在这个流程中,我直接在Splitter中分配表达式而不是使用Expression Transformer。我正在使用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>