Azure 数据工厂表达式生成器:使用嵌套数组和对象构建 JSON 时出错

问题描述 投票:0回答:1

我已经为此工作了几天,并正在寻求帮助。我无法正确构建格式并需要帮助。

我一直在尝试使用表达式生成器在 Azure 数据工厂 (ADF) 中创建 JSON 结构,但遇到错误。这是我想要实现的 JSON 结构:

{
  "entity_id": "value1",
  "link_id": "value2",
  "url": "value3",
  "actions": [
    {
      "appointment_info": {}
    }
  ]
}

在表达式生成器中,我将其结构如下:

@(entity_id=entity_id,
  link_id=link_id,
  url=url,
  actions=[@(appointment_info=@())])

但是,我在

actions=[@(appointment_info=@())]
行收到错误,特别是在
@()
之后的
appointment_info=
处。这应该可行,但 ADF 中仍然显示错误,并且我无法按预期构建它:

"actions": [
  {
    "appointment_info": {}
  }
]

有人可以帮助我了解我做错了什么以及如何在 ADF 的表达式生成器中正确格式化此 JSON 结构吗?任何指导将不胜感激。

json azure azure-data-factory expressionbuilder
1个回答
0
投票

但是,我在

actions=[@(appointment_info=@())]
行收到错误,特别是在
@()
 之后的 
appointment_info=

我尝试了相同的表达式,它说解析错误不正确。似乎 ADF 数据流派生列表达式不支持空

objects

如果您有权访问 Blob 或 Gen2 存储帐户,您可以尝试以下解决方法来满足要求。

首先在派生列转换中使用以下表达式。

replace(toString(@(entity_id=entity_id,
link_id=link_id,
url=url,
actions=[@(appointment_info='my_str')])),'"my_str"','{}')

由于不支持空对象,上面的表达式首先生成所需的 JSON,并用

"my_str"
字符串代替
{}
。然后将其替换为
{}
并获取列中的 JSON 字符串。

enter image description here

接下来,使用选择转换并删除多余的列。

enter image description here

在数据流接收器中,获取分隔文本数据集并提供以下配置。该数据集应来自 Gen2 或 blob。

enter image description here

不要在数据集中为此提供任何文件名。在数据流接收器设置中将文件名指定为

filename.json

enter image description here

在这里,我们使用分隔文本数据集从我们创建的 JSON 字符串生成 JSON 文件。当我们取消选中 First row as header 时,它将按预期提供 JSON 文件。

结果文件:

enter image description here

但是稍后在 ADF 中使用此文件时,您需要创建另一个指向此位置的 JSON 数据集。

© www.soinside.com 2019 - 2024. All rights reserved.