使用返回无名 Json 数组的 API。然后需要将此数据转换为表格格式,以便将其写入数据库。为此,我一直在尝试使用 Azure 数据工厂和展平数据流块。问题在于此块无法获取展开依据或展开根值,因为数组没有名称。我得到的错误是“至少有一个 unrollby 或 unrollMultiple expression expected”。
这不是复杂的功能——在数据流的其他部分,ADF 识别列没有问题。输入和输出是正确的。
我已经尝试使用动态内容在展开值中编码,但不确定到底放什么。我试过 body.null 和其他一些
我尝试使用以下示例 JSON,它具有无名数组并得到与您相同的结果。
数据流不是识别无名的JSON值,而是得到剩余的值。
作为解决方法,您可以首先命名您的 JSON 数组并将其存储在任何中间存储(如 Blob)中,并将其提供给数据流。
当您从 API 获取数据时,使用网络活动获取 JSON。在这里,我使用了从 blob 进行的查找,它将为这个演示提供 JSON 对象作为整个数组。
现在,使用设置变量活动将
""
替换为 "<key>"
和以下表达式。
@json(replace(string(activity('Lookup1').output.value),'""','"key1"'))
我已经将上面的 JSON 数组存储在一个数组变量中。根据您的网络活动表达式更改上述表达式(您可以将其作为字符串本身存储在字符串变量中)。
现在,我得到了如下结果。
将其存储在 Blob 存储中的 json 文件中。为此,请使用复制活动。
在 Copy 活动源中使用带有 1 个标题和 1 行的 csv 文件,并在附加列中使用上述结果。
这里我使用了
string(variable('arr')[0])
,因为我从一个数组中获取这个值。如果将替换值存储在字符串中,则可以直接使用它。
对于复制活动接收器,使用具有以下配置的另一个定界文本数据集。
现在,执行管道,你可以看到我们在 Blob 存储中得到了 JSON 文件。
复制活动后,使用数据流活动并将上述 JSON 作为源提供给数据流,您可以根据需要将其展平。
作为另一种选择,使用 SQL 脚本将 JSON 存储到数据库中。在脚本或存储过程活动中使用
openjson()
之类的函数。