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

时间:2018-04-25 13:06:03

标签: mule org.json

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

<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"}

2 个答案:

答案 0 :(得分:0)

我不认为符号适用于JSONObject,请尝试使用

payload.get('con_id')

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

这不能使用您尝试的符号的原因是Mule支持Maps的符号,而org.json.JSONObject不实现java.util.Map。您可以尝试使用javax.json.JSONObject代替,这将支持该表示法。

答案 1 :(得分:0)

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