mule org.json.JSONObject 将 属性 值返回为 null,尽管 json 属性 确实对它有价值

mule org.json.JSONObject returning property value as null though the json property does have value for it

我正在使用以下代码将输入有效负载字符串转换为 mule 中的 json。下面的代码有时有效,有时无效。它不能独立工作,不能在工作室工作。无法确定它的确切原因。但是根据记录器,我看到 属性 值在表达式语句之后变为 null。我怀疑这可能与这里使用的罐子有关。我还在进一步研究它。

<logger message="input: #[payload]" level="INFO" doc:name="Logger"/>
         <set-payload value="#[payload.'data']" mimeType="application/json" doc:name="Set Payload" encoding="ISO-8859-2"/>
        <logger message="createConnection: #[payload]" level="INFO" doc:name="Logger"/>
        <expression-component doc:name="Expression"><![CDATA[String input = payload;    

payload = new org.json.JSONObject(input);
]]></expression-component>
<logger message="before json to object: #[payload.con_id] #[payload.'con_id']" level="INFO" doc:name="Logger"/>
        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>

输入JSON:

data: {"name":"QA_tst2","description":"tst","con_id":10,"con_connection_id":null,
"verticalParam":[{"param_value":"abc","param_name":"Host"},{"param_value":"21","param_name":"Port"}],"CON_CATEGORY_NAME":"File"}

我认为该表示法不适用于 JSONObject,请尝试使用

payload.get('con_id')

根据 javadoc:https://stleary.github.io/JSON-java/org/json/JSONObject.html

这对您尝试过的符号不起作用的原因是 Mule 支持地图的该符号,并且 org.json.JSONObject 没有实现 java.util.Map。您可以尝试改用 javax.json.JSONObject,它将支持该表示法。

我已经弄清楚了当前的问题。如果在表达式组件之后添加了任何记录器以从有效负载中获取属性,那么它会进一步搞砸。如果您只是删除在表达式组件之后添加的记录器,然后在 json 到对象转换之后,我能够获取值。解决了当前的问题。但我想了解获取属性#[payload.con_id] 与#[payload.'con_id'] 之间的区别。我可以为此开始单独的对话。