【问题标题】:Parse JSON in Mule 3.2 Flow在 Mule 3.2 Flow 中解析 JSON
【发布时间】:2012-12-02 11:07:21
【问题描述】:

如果我有以下 JSON

[ 
  { "category": "reference",
    "author": "Nigel Rees",
    "title": "Sayings of the Century",
    "price": 8.95
  },
  { "category": "fiction",
    "author": "Evelyn Waugh",
    "title": "Sword of Honour",
    "price": 12.99
  },
  { "category": "fiction",
    "author": "Herman Melville",
    "title": "Moby Dick",
    "isbn": "0-553-21311-3",
    "price": 8.99
  },
  { "category": "fiction",
    "author": "J. R. R. Tolkien",
    "title": "The Lord of the Rings",
    "isbn": "0-395-19395-8",
    "price": 22.99
  }
]

我可以使用以下 JSONPath 获取“Moby Dick”的价格:

$..[?(@.title=='Moby Dick')].price

结果:

'0' => "8.99"

但是我如何在 Mule 中执行此操作..... json 表达式会是什么样子才能在 mule 3.2 流程中获得相同的结果?

只要我在 mule 中得到相同的结果,我不介意您的回答是否显示了如何以另一种方式做到这一点。

谁能帮我解决这个问题?

【问题讨论】:

  • 这样的事情是否可行#[json-node://[title=='Moby Dick']/price]

标签: json expression esb mule jsonpath


【解决方案1】:

使用 MEL 的方法是反序列化 JSON 有效负载并使用 MVEL filtered projection

<json:json-to-object-transformer returnClass="java.util.List" />
<expression-transformer 
    expression="#[($.price in message.payload if $.title == 'Moby Dick')[0]]" />

此表达式不考虑Moby Dick 不存在的情况。您没有提到在这种情况下该怎么做:如果您在找不到图书时指定所需的行为,我可以加强表达。

【讨论】:

  • 我同意大卫的观点。 Mule 的 JSONPath 支持非常基础,绝对不是您所期望的。
  • 这在 mule 3.2 中对我不起作用。我收到此错误消息:表达式转换器必须具有以下集合之一的所有属性:[评估器,表达式]。
  • 抱歉,这是针对 3.3 的。你真的应该升级:3.2 已经过时了,很多错误在 3.3 中已经被杀死。
  • 将生产系统升级到 3.3 有多容易,是否向后兼容?这可能会给我带来很大的问题。
  • 它们应该是向后兼容的,尤其是当你在 Mule 命名空间中使用 /current/ 而不是 /3.2/ 时(推荐)。我已经顺利地将我的所有代码从 3.2 移到 3.3 并且从未回头:P
猜你喜欢
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
相关资源
最近更新 更多