从mule esb中的JSON中提取所有特定字段

use*_*129 3 groovy json mvel mule mule-studio

我有这个json有效载荷,我想一次性收集所有externalListingId -

{
"listings": {
    "numFound": 3,
    "listing": [
        {
            "status": "INACTIVE",
            "pricePerTicket": {
                "amount": 100,
                "currency": "USD",
            },
            "paymentType": "1",
            "externalListingId": "12208278",
            "city": "New York"
        },
        {   "status": "ACTIVE",
            "pricePerTicket": {
                "amount": 4444,
                "currency": "USD"
            },
            "paymentType": "1",
            "externalListingId": "CID1421798897102:151681733",
            "city": "Seattle"
        }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用MVEL表达式 -

<enricher target="#[flowVars['sData']]" source="#[(externalListingId in payload.listing)]" doc:name="Message Enricher">
    <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
    </enricher>
Run Code Online (Sandbox Code Playgroud)

但这是错误的! - 消息有效内容的类型为:ReleasingInputStream.

场景 - 我想将所有externalListingId收集到flowVariable中,转换为hashmap.我有另一个CSV文件作为输入,想循环通过该有效负载,并检查此映射是否包含id !!

我正在关注这篇早期文章 - 在mule esb中从JSON中提取数组

Dav*_*sot 5

您需要将消息的流式有效负载转换为对象:

<json:json-to-object-transformer returnClass="java.lang.Object" />
Run Code Online (Sandbox Code Playgroud)

之前enricher,删除你里面的那个.

您还需要修复MEL,因为其中listings缺少属性:

source="#[(externalListingId in payload.listings.listing)]"
Run Code Online (Sandbox Code Playgroud)

来源:http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+Tips#MuleExpressionLanguageTips-JSONProcessing