Mule如何将Json值从有效负载映射到流变量

时间:2013-09-08 05:38:28

标签: mule

我有一个JDBC COnnector,它从数据库中检索值,并将它们从对象映射到JSON。现在我想从json中提取特定值到流变量。当我尝试记录#[message.payload]时,我在日志中获得了JSON格式的完整有效负载。但是,当我尝试选择一个属性(例如,json中的testattribute)#[message.payload.testattribute]时,我得到mule表达式错误。我如何参考json值?

4 个答案:

答案 0 :(得分:3)

一旦有效载荷是JSON字符串,就不能再用表达式从中提取任何内容了。

所以:

  • 在将有效负载转换为JSON之前,使用MEL将值提取到流变量中,
  • 将JSON有效负载转换为POJO或Map / Lists,使用MEL将值提取到流变量中,然后将有效负载重新转换回JSON。

答案 1 :(得分:3)

如果您的要求是从json数据中获取值,您可以使用简单的MEL表达式,如

#[json:<name of the node>] 

例如,如果你有像这样的样本json数据

{
"token" : 123,
"id" : 456,
"email" : "abc@abc.com",
"status" : "Success"
}

如果你想从数据中获取id,只需使用下面简单的MEL。

#[json:'id']

答案 2 :(得分:2)

Mule具有JSON-to-Object转换器,可用于获取JSON元素。 例如,如果您的JSON如下: -

{
  "token" : 123,
  "id" : 456,
  "email" : "abc@abc.com",
  "status" : "Success"
}

现在,要提取元素,您需要使用: -

<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object" />

然后可以提取: - #[message.payload.email]#[message.payload.status]

答案 3 :(得分:1)

使用以下组件

  1. 对象 - 字符串
  2. 对象 - JSON
  3. 然后你可以使用json表达式直接提取值为#{json:email} , 在xml下面,我使用变量组件在&#34; var1&#34;中设置了#{json:email}。流量变量的可用性

    注意:json表达式甚至可以在5.x

    的工作室版本中使用
     <object-to-string-transformer doc:name="Object to String"/>
     <json:object-to-json-transformer doc:name="Object to JSON"/>
     <set-variable variableName="var1" value="#[json:email]" doc:name="Variable"/>