我使用下面的代码将输入的有效负载字符串转换为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"}
答案 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']之间的区别。我可以为此开始单独的对话。