2017-08-09 46 views
0

我需要从以下JSON的flowVars在骡子ESB 3.8.3比较flowVars值JSONPath值在骡子ESB

{"id":"users_0001","username":"0001","firstName":"AB","lastName":"C","email":"[email protected]","enabled":true} 

在选择运营商

<choice doc:name="Choice"> 
    <when expression="#[json:[0]/username != flowVars.username]"> 
     <flow-ref name="put account" doc:name="put account"/> 
    </when> 
    <otherwise> 
     <flow-ref name="do nothing" doc:name="do nothing"/> 
    </otherwise> 
</choice> 

使用这种表达比较用户名在调试过程中,我可以看到两个json:[0] /用户名& flowVars.username返回相同的值,但为什么当比较它们时总是返回false?

这里的结果,当我评价他们

flowVars.username == "0001", returns true 
flowVars.username == '0001', returns true 
flowVars.username == 0001, returns true 
json:[0]/username = 0001, returns true 
json:[0]/username = "0001", returns false 
json:[0]/username = '0001', returns false 
json:[0]/username != flowVars.username, returns true 
json:[0]/username = flowVars.username, returns false 

回答

0

我会避免使用#[JSON]工具,只是变换传入的JSON成一个HashMap。你的生活会更容易,加上使用HashMap更容易。

根据文档:https://docs.mulesoft.com/mule-user-guide/v/3.7/mule-expression-language-tips

JSON处理 MEL对JSON没有直接的支持。 JSON到对象变换器可以将JSON负载转换为简单数据结构的层次结构,这些结构可以使用MEL轻松解析。

在你的情况,这样的事情:

<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/> 
    <choice doc:name="Choice"> 
     <when expression="#[payload.username != flowVars.username]"> 
      <flow-ref name="put account" doc:name="put account"/> 
     </when> 
     <otherwise> 
      <flow-ref name="do nothing" doc:name="do nothing"/> 
     </otherwise> 
    </choice>