如何在 JSON 字段上应用正则表达式以从中提取某些值并将其存储到 Mule Studio 的 PostgreSQL Dataabse 中?
Posted
技术标签:
【中文标题】如何在 JSON 字段上应用正则表达式以从中提取某些值并将其存储到 Mule Studio 的 PostgreSQL Dataabse 中?【英文标题】:How to apply regular expression on a JSON field to extract certain values from it and store into PostgreSQL Dataabse fron Mule Studio? 【发布时间】:2013-02-12 06:54:16 【问题描述】:假设我有一个基于 REST 的服务,它返回一个 JSON 对象,如下所示
"AlertDetails":
"start":0,
"left":0,
"_itemList":
[
"id":"badntp",
"text":"The time cannot be synchronized to the configured time server.",
"click":
"text":"Click here to modify your time settings.",
"url":"datetime.html"
,
"severity":"warning",
"occurred":"20121031T10:18:54",
"args":null
,
"id":"updatesitefail",
"text":"The update site cannot be contacted to determine if software updates are available.",
"click":
"text":"Click here to manually check for updates.",
"url":"http:\\\/\\\/xyz.com\\\/support\\\/xyz.html"
,
"severity":"info",
"occurred":"20121105T17:23:24",
"args":"[http:\\\/\\\/xyz.com\\\/support\\\/xyz.html]"
]
现在我在 PostgreSQL 中有一个表(比如 testTable),其结构如下
ID (string)
Severity (string)
Occurred (string)
如何从可用的 JSON 字段中解析这些值,以将其插入 Mule ESB 工作室的 PostgreSQL 数据库中。
testTable中的最终结果应该是
ID Severity Occured
--------- --------- --------
"badntp" "warning" "20121031T10:18:54"
"updatesitefail" "info" "20121105T17:23:24"
我的配置文件如下
<jdbc:postgresql-data-source name="PostgreSQL_Data_Source"
user="username" password="pwd" url="jdbc:postgresql://localhost:5432/TestDB"
transactionIsolation="UNSPECIFIED" doc:name="PostgreSQL Data Source" />
<jdbc:connector name="PostgreSQL_Connector" dataSource-ref="PostgreSQL_Data_Source"
validateConnections="true" queryTimeout="-1" pollingFrequency="0"
doc:name="Database">
<jdbc:query key="InsertRecord"
value="INSERT INTO "testTable"("ID","Severity","Occured") VALUES (?,?,?)" />
</jdbc:connector>
<flow name="testRestFlow1" doc:name="testRestFlow1">
<http:inbound-endpoint exchange-pattern="request-response"
address="http://localhost:8082/index.html" doc:name="HTTP" />
<http:rest-service-component httpMethod="GET"
serviceUrl="http://localhost:35798/RestServiceImpl.svc/json/567" />
<object-to-string-transformer />
<jdbc:outbound-endpoint exchange-pattern="one-way"
queryKey="InsertRecord" queryTimeout="-1" connector-ref="PostgreSQL_Connector"
doc:name="Database" />
</flow>
#[message.payload] 将包含整个 JSON 字符串。 VALUES (?,?,?)
中会出现什么(正则表达式或其他内容)来解析 #[message.payload]
?
提前致谢
【问题讨论】:
【参考方案1】:来自MEL cheatsheet:
MEL 不直接支持 JSON。 json-to-object-transformer 可以 将 JSON 有效负载转换为简单数据结构的层次结构 很容易用 MEL 解析。
因此首先使用将 JSON 转换为数据结构(地图、列表):
<json:json-to-object-transformer returnClass="java.lang.Object" />
然后我们提取_itemList
数组:
<expression-transformer
expression='#[message.payload['AlertDetails']['_itemList']]" />
然后我们将这个数组拆分成单独的消息:
<collection-splitter />
从那里,以下表达式将计算为所需的值,以便它们可以在插入查询中使用:
#[message.payload.id]
#[message.payload.severity]
#[message.payload.occurred]
【讨论】:
【参考方案2】:您无法使用正则表达式获取数据,因为 JSON 文件的语言不是正则的(它是上下文无关的)。我建议您解析它(为此使用一些库),然后遍历它并读取值。
【讨论】:
不好意思,没看清楚,还以为是编程的问题。你能在你的环境中编写程序吗?如果没有,我可能应该删除我的答案。以上是关于如何在 JSON 字段上应用正则表达式以从中提取某些值并将其存储到 Mule Studio 的 PostgreSQL Dataabse 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中从 JSON 中提取图像链接 - 正则表达式