在我的datafactory管道中,我有一个网络活动,该活动在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))
输出-System.Collections.Generic.List`1 [System.Object]
@json(activity('Web1').output.Response[0])
输出-无法评估,因为无法选择属性'0'。类型'String'的值不支持属性选择
@json(activity('Web1').output.Response.Message)
输出-无法评估,因为无法选择属性“消息”。类型'String'的值不支持属性选择
答案 0 :(得分:0)
这是我所做的: 我创建了一个新管道,并全部使用您的“输出”创建了一个“对象”类型的参数:
{ "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]
现在可以工作了,因为数据工厂将内容视为对象而不是字符串文字。这种转换似乎也已应用于嵌套的内容,因为如果没有封装{curly braces}转换为字符串,由于变量的类型为string,那么我将从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": []
}
}