将JSONPath值与Mule ESB中的flowVars值进行比较

时间:2017-08-09 06:09:39

标签: json mule string-comparison jsonpath mule-esb

我需要将下面JSON的用户名与Mule ESB 3.8.3中的flowVars进行比较

{"id":"users_0001","username":"0001","firstName":"AB","lastName":"C","email":"abc@abc.com","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] / username&amp; 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

1 个答案:

答案 0 :(得分:0)

我会避免使用#[json]工具,只是将传入的JSON转换为HashMap。您的生活将变得更容易,并且更容易使用HashMap。

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

JSON处理 MEL没有直接支持JSON。 json-to-object-transformer可以将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>