Получить значение поля из массива JSON в Mule flowVars

Я использую Anypoint 6.1 и Mule 3.8.1, и у меня есть переменная потока, которая содержит объект JSON, который выглядит следующим образом:

{
  "stores": [
    [
      "store1"
    ],
    [
      "store2"
    ]
   ]
}

Пока я перебираю полезную нагрузку, я хочу извлечь значение из flowVars, которое относится к обрабатываемому объекту, из полезной нагрузки, используя значение счетчика в качестве позиции массива. Я не хочу перемещать его в массив, потому что тогда мне нужно будет добавить дополнительный шаг для форматирования значения для использования в запросе к базе данных, например. добавить ", которые уже есть в JSON.

Как я могу это сделать?

Пока у меня есть что-то вроде этого, но это неправильно:

#[flowVars.storeData[json:stores[0]]]

Спасибо


person user3165854    schedule 14.01.2017    source источник
comment
Вы уверены, что полезная нагрузка, упомянутая выше, верна? Массив внутри массива не имеет смысла. Я бы предположил, что следующий json будет иметь больше смысла {stores:[store1,store2]}.   -  person Senthil c    schedule 16.01.2017


Ответы (1)


Вот пример, который, я думаю, имитирует то, что вы делаете. В полезной нагрузке я установил json {"stores":[["store1"],["store2"]]}. Прежде чем поместить его в переменную, я использую сообщение преобразования (dataweave), чтобы вернуть индексированное хранилище в виде строки. Payload.stores[1] возвращает массив ["store2"] и joinBy "" удаляет скобки массива, оставляя "store2".

     <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
     <flow name="myprojectFlow">
       <http:listener config-ref="HTTP_Listener_Configuration" path="/stores" allowedMethods="GET" doc:name="HTTP"/>
       <set-payload value="{&quot;stores&quot;:[[&quot;store1&quot;],[&quot;store2&quot;]]}" doc:name="Set Payload"/>
       <dw:transform-message metadata:id="adf13229-f050-43dd-bffb-ca2319a3723b" doc:name="Transform Message">
          <dw:input-payload mimeType="application/json"/>
          <dw:input-variable mimeType="application/json" variableName="mystores"/>
          <dw:set-payload><![CDATA[%dw 1.0
          %output application/json
           ---
           payload.stores[1] joinBy ""
          ]]></dw:set-payload>
       </dw:transform-message>
       <set-variable variableName="mystore" value="#[payload]" mimeType="application/json" doc:name="Variable"/>
       <logger message="#[payload]" level="INFO" doc:name="Logger"/>
     </flow>

Регистратор возвращает:

INFO 2017-01-17 15:31:24,242 [[myproject].HTTP_Listener_Configuration.worker.01] org.mule.api.processor.LoggerMessageProcessor: «store2»

person catpaws    schedule 17.01.2017