无法解析 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 的输出。
在我的数据工厂管道中,我有一个网络 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 的输出。