【问题标题】:Parse Json in Logic App from Stream Analytics -> Service Hub -> Logic Apps从流分析 -> 服务中心 -> 逻辑应用程序解析逻辑应用程序中的 Json
【发布时间】:2016-05-25 10:52:46
【问题描述】:

我正在尝试构建一个将数据插入 Sql 数据库的逻辑应用程序。数据来自流分析作业,在服务总线主题上输出,在服务总线触发器中的逻辑应用程序中使用。

要填充插入行的属性(假设它只有一列“名称”),我发现这应该使用以下语法:

 "body": {
          "Name": "@{json(decodeBase64(triggerBody()['ContentData'])).Name}"
  },

如果消息正文包含“名称”属性。

但是在运行时我收到以下错误消息:

{"code":"InvalidTemplate","message":"Unable to process template language expressions in action 'Insert_row' input at line '1' and column '2017': '模板语言函数'json'参数是无效。提供的值 '@\u0006string\b3http://schemas.microsoft.com/2003/10/Serialization/��{\"time\":\"2016-05-25T10:29:17.4953250Z\" ,\"名称\":\"Y 轴\",\"值\":81.0,\"日期\":\"2016-05-25T10:29:17.4953250\",\"EventProcessedUtcTime\":\ "2016-05-25T10:29:17.5525449Z\",\"PartitionId\":2,\"EventEnqueuedUtcTime\":\"2016-05-25T10:29:17.2220000Z\"}\u0001' 无法解析: '解析值时遇到意外字符:@.Path '',第 0 行,第 0 位。'。有关使用详情,请参阅https://aka.ms/logicexpressions#json。'。"}

因此,内容似乎包含在另一个阻止 json 解析工作的信封中。

1) 有什么简单的方法可以解决这个问题?

2) Microsoft Stack 中的这种集成难道不应该在没有这种嘲笑的情况下工作吗?

谢谢, 斯蒂芬

【问题讨论】:

  • 你有没有以一种非 hacky 的方式进行这项工作?

标签: json azureservicebus azure-stream-analytics azure-logic-apps


【解决方案1】:

由于工作流定义语言中可用的字符串函数有限,我不得不使用冗长的方法来删除额外的字符串

@{json(substring(replace(decodeBase64(triggerBody()['ContentData']),'@string3http://schemas.microsoft.com/2003/10/Serialization/��', ''),0,sub(length(replace(decodeBase64(triggerBody()['ContentData']),'@string3http://schemas.microsoft.com/2003/10/Serialization/��', '')),1))).fieldname}

有没有更好的方法来做到这一点

【讨论】:

    【解决方案2】:

    感谢您报告此问题,您说得对,它应该可以正常工作。存在一个已知问题,即 ASA ServiceBus 输出 JSON 被包装在 XML 标头中。它将在不久的将来解决,但无法指定特定日期。在此之前,您能否解决它(也许使用子字符串/替换)?

    干杯, 车坦

    【讨论】:

    • 问题已解决,请查看下面的其他答案,了解如何为您的工作启用它。
    【解决方案3】:

    抱歉延迟返回,此问题现已修复。它在新的兼容性级别 (1.1) 下公开,以避免破坏现有解决方案。请使用此URL 将您的作业配置为兼容级别 1.1 并试一试。

    干杯!

    【讨论】:

    • 我通过 PowerShell Cmdlet 创建我的 ASA 实例,如何从那里设置“兼容级别 1.1”?
    • 我已就此与 Microsoft 联系,但此解决方案存在一些问题。此“兼容模式”仍处于预览阶段,其中包括对 SA 行为的一些其他更改,并且可能在 GA 之前进行进一步更改。关于我最初的评论,据说在 ARM 模板中添加 "compatibilityLevel" : 1.1 应该可以工作,但由于其他问题没有对其进行测试。
    • 我测试了在 ARM 模板中设置兼容性级别,它确实有效。您必须将属性添加到资源的“properties”对象 - 与输入和输出数组相邻:“properties”:{ ... “outputErrorPolicy”:“stop”、“eventsOutOfOrderPolicy”:“adjust”、“eventsOutOfOrderMaxDelayInSeconds”: 0, "eventsLateArrivalMaxDelayInSeconds": 5, "dataLocale": "en-US", "compatibilityLevel" : "1.1", "inputs": [ .... Azure Resource Explorer (resources.azure.com) 真的很有帮助!
    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2019-04-24
    • 2013-04-12
    相关资源
    最近更新 更多