4

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

4

4 回答 4

3

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

所以要么:

  • 在将有效负载转换为 JSON 之前,使用 MEL 将值提取到流变量中,
  • 将 JSON 负载转换为 POJO 或 Map/Lists,使用 MEL 将值提取到流变量中,然后将负载重新转换回 JSON。
于 2013-09-08T15:29:21.977 回答
3

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

#[json:<name of the node>] 

例如,如果您有这样的示例 json 数据

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

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

#[json:'id']
于 2017-08-10T14:06:29.703 回答
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]

于 2015-07-21T04:01:05.710 回答
1

使用组件如下

  1. 对象 - 字符串
  2. 对象 - JSON

然后你可以使用json表达式直接提取使用值作为#{json:email},在下面的xml中我使用变量组件在“var1”流变量中设置#{json:email}以提高可用性

注意: json 表达式甚至在 5.x 的 studio 版本中可用

 <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"/>
于 2015-12-24T09:46:26.647 回答