在我的数据工厂管道中,我有一个 Web 活动,它给出了以下 JSON 响应。在下一个存储过程活动中,我无法解析输出参数。我尝试了几种方法。
我在网络活动中设置了内容类型application/json
示例 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"}]}]"
}
对于存储过程活动中的参数:
@json(first(activity('Web1').output.Response))
output - System.Collections.Generic.List'1[System.Object]
@json(activity('Web1').output.Response[0])
输出 - 无法计算,因为无法选择属性"0"。类型为"字符串"的值不支持属性选择
@json(activity('Web1').output.Response.Message)
输出 - 无法评估,因为无法选择属性"消息"。类型为"字符串"的值不支持属性选择
这是我所做的: 我创建了一个新管道,并使用您的"输出"完整创建了一个类型为"对象"的参数:
{ "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"}]}]" }
我创建了一个变量和 setVariable 活动。 变量的类型为字符串。 我使用的动态表达式是:
@{json(pipeline().parameters.output.response)[0]}
让我分解并解释一下。 {大括号} 是必需的,因为变量的类型是字符串。 您可能不想要/不需要它们。
json(....)
是必需的,因为"响应"值的数据类型保留为字符串。 字符串是否是正确的行为是不同的讨论。 通过从字符串转换为 json,我现在可以完成最后一件。
[0]
现在可以工作,因为数据工厂将内容视为对象而不是字符串文本。 这种转换似乎也已应用于嵌套内容,因为如果没有封装 {大括号} 转换为字符串,我会从我的 setVariable 活动中收到类型错误,因为变量是字符串类型。
整个管道代码:
{
"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": []
}
}
我遇到了类似的问题,这就是我解决问题的方式。
我将响应的值作为字符串传递给查找活动,该活动调用 Azure SQL 中的存储过程。存储过程使用 Json_value 分析字符串,并将单个键 value 作为行返回。现在,可以直接从前面的活动访问查找活动的输出。