【问题标题】:How do parse string as JSON in Logic App?如何在 Logic App 中将字符串解析为 JSON?
【发布时间】:2019-02-21 03:09:21
【问题描述】:

我有 JSON,下面是我从外部实体接收的。如您所见,requestbody 参数显示为 string,即使它是 JSON。那么如何取消转义以便在下游正确解析它呢?

{
  "emailaddress": "174181@mycomp.com",
  "requestbody": "{\"Id\":\"57518139-687c-4223-b08b-342f4ff426ca\",\"Properties\":{\"PrincipalId\":\"d701e7aa-5a0a-4c4a-81be-4c4b7a3967ce\",\"RoleDefinitionId\":\"/subscriptions/64ba3e4c-45e3-4d55-8132-6731cf25547f/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635\",\"Scope\":\"/subscriptions/64ba3e4c-45e3-4d55-8132-6731cf25547f\"}}"
}

【问题讨论】:

    标签: json azure-logic-apps json-deserialization


    【解决方案1】:
    1. 使用解析 JSON 操作,如下所示:

    内容:

    {
      "emailaddress": "174181@mycomp.com",
      "requestbody": "{\"Id\":\"57518139-687c-4223-b08b-342f4ff426ca\",\"Properties\":{\"PrincipalId\":\"d701e7aa-5a0a-4c4a-81be-4c4b7a3967ce\",\"RoleDefinitionId\":\"/subscriptions/64ba3e4c-45e3-4d55-8132-6731cf25547f/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635\",\"Scope\":\"/subscriptions/64ba3e4c-45e3-4d55-8132-6731cf25547f\"}}"
    }
    

    架构

    {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "properties": {
            "emailaddress": {
                "type": "string"
            },
            "requestbody": {
                "type": "string"
            }
        },
        "required": [
            "emailaddress",
            "requestbody"
        ],
        "type": "object"
    }
    

    1. 初始化变量
    -Name = Variable Name
    -Type = Object
    -Value = json(body('Parse_JSON')['requestbody'])
    

    1. 现在您可以提取 Json 字符串的属性,如下所示:
    variables('jsonobj')?['Properties']
    

    我的示例的完整代码视图:

    {
        "definition": {
            "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
            "actions": {
                "Initialize_variable": {
                    "inputs": {
                        "variables": [
                            {
                                "name": "jsonobj",
                                "type": "Object",
                                "value": "@json(body('Parse_JSON')['requestbody'])"
                            }
                        ]
                    },
                    "runAfter": {
                        "Parse_JSON": [
                            "Succeeded"
                        ]
                    },
                    "type": "InitializeVariable"
                },
                "Parse_JSON": {
                    "inputs": {
                        "content": {
                            "emailaddress": "174181@mycomp.com",
                            "requestbody": "{\"Id\":\"57518139-687c-4223-b08b-342f4ff426ca\",\"Properties\":{\"PrincipalId\":\"d701e7aa-5a0a-4c4a-81be-4c4b7a3967ce\",\"RoleDefinitionId\":\"/subscriptions/64ba3e4c-45e3-4d55-8132-6731cf25547f/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635\",\"Scope\":\"/subscriptions/64ba3e4c-45e3-4d55-8132-6731cf25547f\"}}"
                        },
                        "schema": {
                            "$schema": "http://json-schema.org/draft-04/schema#",
                            "properties": {
                                "emailaddress": {
                                    "type": "string"
                                },
                                "requestbody": {
                                    "type": "string"
                                }
                            },
                            "required": [
                                "emailaddress",
                                "requestbody"
                            ],
                            "type": "object"
                        }
                    },
                    "runAfter": {},
                    "type": "ParseJson"
                },
                "Response": {
                    "inputs": {
                        "body": "@variables('jsonobj')?['Properties']",
                        "statusCode": 200
                    },
                    "kind": "Http",
                    "runAfter": {
                        "Initialize_variable": [
                            "Succeeded"
                        ]
                    },
                    "type": "Response"
                }
            },
            "contentVersion": "1.0.0.0",
            "outputs": {},
            "parameters": {},
            "triggers": {
                "manual": {
                    "inputs": {
                        "schema": {}
                    },
                    "kind": "Http",
                    "type": "Request"
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      最简单的方法是使用这个表达式:

      @json(outputs('Mock_example_data').requestbody)
      

      下面是一个使用Compose 操作模拟您的数据和另一个Compose 操作作为简单概念证明的示例。

      【讨论】:

      • 数组呢?
      • 如果 json() 函数不起作用,您可以将输入包装在 array() 工作流函数中。
      猜你喜欢
      • 2020-02-28
      • 1970-01-01
      • 2011-03-14
      • 2020-07-31
      • 1970-01-01
      • 2021-02-06
      • 2015-05-27
      • 1970-01-01
      相关资源
      最近更新 更多