无法解析 Azure 数据工厂 ADF 中的 JSON 列表

Unable to parse JSON list in Azure Data Factory ADF

在我的数据工厂管道中,我有一个网络 activity,它给出以下 JSON 响应。在下一个存储过程中 activity 我无法解析输出参数。我尝试了几种方法。

我在网页中设置了 Content-Type application/json activity

样本JSON:

Output
{
    "Response": "[{\"Message\":\"Number of barcode(s) found:1\",\"Status\":\"Success\",\"CCS Office\":[{\"Name\":\"Woodstock\",\"CCS Description\":null,\"BranchType\":\"Sub CFS Office\",\"Status\":\"Active\",\"Circle\":\"NJ\"}]}]"
}

对于存储过程中的参数activity:

@json(first(activity('Web1').output.Response))

输出 - System.Collections.Generic.List`1[System.Object]

@json(activity('Web1').output.Response[0])

输出 - 无法评估,因为无法选择 属性“0”。 属性 'String'

类型的值不支持选择
@json(activity('Web1').output.Response.Message)

输出 - 无法评估,因为无法选择 属性 'Message'。 属性 'String'

类型的值不支持选择

这是我所做的: 我创建了一个新管道,并使用您的整个 'output' 创建了一个 'object' 类型的参数:

{     "Response": "[{\"Message\":\"Number of barcode(s) found:1\",\"Status\":\"Success\",\"CCS Office\":[{\"Name\":\"Woodstock\",\"CCS Description\":null,\"BranchType\":\"Sub CFS Office\",\"Status\":\"Active\",\"Circle\":\"NJ\"}]}]" }

我创建了一个变量并设置了变量activity。变量是字符串类型。我使用的动态表达式是:

@{json(pipeline().parameters.output.response)[0]}

让我分解解释一下。 {花括号} 是必需的,因为变量是字符串类型。你可能不会 want/need 他们。

json(....)

是必需的,因为 'response' 的值的数据类型保留为字符串。它是否是字符串是正确的行为是一个不同的讨论。通过从字符串转换为 json,我现在可以完成最后一段了。

[0]

现在有效,因为数据工厂将内容视为对象而不是字符串文字。这种转换似乎也适用于嵌套内容,因为如果没有封装 {花括号} 转换为字符串,我会从我的 setVariable activity 中得到一个类型错误,因为变量是字符串类型。

整个流水线代码:

{
"name": "pipeline11",
"properties": {
    "activities": [
        {
            "name": "Set Variable1",
            "type": "SetVariable",
            "dependsOn": [],
            "userProperties": [],
            "typeProperties": {
                "variableName": "thing",
                "value": {
                    "value": "@{json(pipeline().parameters.output.response)[0]}",
                    "type": "Expression"
                }
            }
        }
    ],
    "parameters": {
        "output": {
            "type": "object",
            "defaultValue": {
                "Response": "[{\"Message\":\"Number of barcode(s) found:1\",\"Status\":\"Success\",\"CCS Office\":[{\"Name\":\"Woodstock\",\"CCS Description\":null,\"BranchType\":\"Sub CFS Office\",\"Status\":\"Active\",\"Circle\":\"NJ\"}]}]"
            }
        }
    },
    "variables": {
        "thing": {
            "type": "String"
        }
    },
    "annotations": []
}

}

我遇到了类似的问题,这就是我解决问题的方法。

我将 Response 的值作为字符串传递给查找 activity,它调用 Azure SQL 中的存储过程。存储过程使用 Json_value 和 return 单独的键、值作为一行来解析字符串。现在可以直接从前面的活动访问查找 activity 的输出。