You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Logic Apps队列消息处理:提取参数格式化邮件内容

搞定Azure Logic App邮件正文格式化问题

嗨,我来帮你解决这个邮件正文格式的问题!你现在的代码把解码后的队列内容和ContentType直接拼在一起了,不仅带了一堆多余的前缀,还没正确提取JSON里的字段,所以才会出现那种混乱的内容。咱们一步步来调整:

第一步:先把队列消息里的纯JSON挖出来

你解码后的内容前面有一堆序列化相关的前缀,得先把后面的纯JSON部分提取出来才行。用下面这个表达式就能搞定:

json(substring(base64ToString(triggerBody()?['ContentData']), indexOf(base64ToString(triggerBody()?['ContentData']), '{')))

简单说下这个表达式做了啥:

  • 先把队列里的ContentData(base64编码的内容)解码成字符串
  • 找到JSON开始的那个{符号的位置,从这里开始截取到结尾,就得到纯JSON内容了
  • 最后把这段字符串转成Logic App能识别的JSON对象

你可以把这个表达式放到一个Parse JSON动作里,这样后面用起来更方便;要是嫌麻烦,也可以直接在邮件正文里嵌套使用。

第二步:拼接成你想要的邮件格式

有了解析好的JSON对象,咱们就能提取deviceid和x_left字段,拼成目标文本啦。

如果用了Parse JSON动作(假设动作名叫Parse_JSON),邮件正文就这么写:

Your @{outputs('Parse_JSON')?['deviceid']} is and distance is @{outputs('Parse_JSON')?['x_left']} Thanks!

要是不想单独加Parse JSON步骤,直接在邮件正文里写嵌套表达式也行:

Your @{json(substring(base64ToString(triggerBody()?['ContentData']), indexOf(base64ToString(triggerBody()?['ContentData']), '{')))?['deviceid']} is and distance is @{json(substring(base64ToString(triggerBody()?['ContentData']), indexOf(base64ToString(triggerBody()?['ContentData']), '{')))?['x_left']} Thanks!

小补充

你看到的那些前缀,应该是消息用.NET的DataContractSerializer序列化导致的,属于正常情况。要是后续消息的前缀长度固定,你也可以直接用固定长度截取(比如substring(xxx, 70),具体长度自己数一下前缀的字符数),这样效率会稍微高一点。

内容的提问来源于stack exchange,提问作者kimbl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:38:28