Azure 数据流:从 JSON 字符串解析对象的嵌套列表
Posted
技术标签:
【中文标题】Azure 数据流:从 JSON 字符串解析对象的嵌套列表【英文标题】:Azure Data Flow: Parse nested list of objects from JSON String 【发布时间】:2021-10-03 09:41:33 【问题描述】:我需要从 Azure 数据流中的字符串解析 JSON 数据。到目前为止,我能够使用数据流的“解析”功能解析我的所有数据。但是现在我面临着一个对象列表,我不知道如何解析那个“复杂数组”的值。
我的数据如下所示: 有一些元数据字段(此处为空)和 Base64 编码的正文字段。每个 JSON 文档都在一个单独的 JSON 文件中。
示例数据:
"metadata": null,
"Body": "eyJpZCI6ICIxIiwgImNvdW50IjogMTIsICJwcm9qZWN0cyI6IFt7Imd1aWQiOiAiMTIzMTItMTI0MzE0LTEyNDEtMTIzNCIsICJzdGF0dXMiOiAic3RvcHBlZCJ9LHsiZ3VpZCI6ICJjc2lzdi1uZDkyM24tMTM0MS0yMzQxIiwgInN0YXR1cyI6ICJydW5uaW5nIn1dfQ"
为了澄清,编码的示例数据如下所示:
"metadata": null,
"Body": ""id": "1", "count": 12, "projects": ["guid": "12312-124314-1241-1234", "status": "stopped","guid": "csisv-nd923n-1341-2341", "status": "running"]"
我的目标是创建一个包含 Body 数据的 parquet 文件。 所以应该有三列:id、count、projects。项目应包含复杂对象的列表。
最终结果应该是这样的: 这是结果,当我加载一个 JSON 文件时,其中的正文数据未编码,而是包含对象列表的纯 JSON。请注意,这对于原始问题是不可行的,因为 JSON 数据是 Base64 编码的。
当我将示例数据加载到数据流中时,投影看起来像这样(如预期的那样):
首先,我需要解码 Base64 Body,然后我可以解析 JSON 字符串:
解码体在这里完成:
基本解析在这里完成:
如何解析“项目”字段?假设数组字段列表中的每个对象都具有相同的架构。
我已经尝试将字段“projects”解析为字符串,并添加另一个 Parse 步骤以将此字符串解析为“文档数组”,但结果只是 Null 值..
【问题讨论】:
【参考方案1】:最终的数据流如下所示:
解析必须分成几个部分。
首先需要将数组解析为字符串数组 必须分解字符串数组 现在,可以解析每个数组条目 可以将分解的阵列收集回来以获得我想要的结构 最后,分解和重新收集的数据可以重新加入到原始数据中将对象数组解析为字符串数组
记住:我要解析的数据如下所示:
"metadata": null,
"Body": ""id": "1", "count": 12, "projects": ["guid": "12312-124314-1241-1234", "status": "stopped","guid": "csisv-nd923n-1341-2341", "status": "running"]"
所以首先我需要解析“Body”列,即 BodyDecoded,因为我首先必须从 Base64 解码。对象数组必须被解析为字符串数组。 因此,解析步骤的“输出列类型”如下所示:
(id as string,
count as integer,
projects as string[])
值写入BodyContent
列。为了使接下来的步骤更容易,首先将层次结构扁平化。可以为此使用列模式,但我会在这里明确地这样做:
此外,projects 列现在重命名为projectsStringArray
分解字符串数组
现在projectsStringArray
可以使用“展平”步骤进行分解。
id
列也取到这里,以便以后能够重新收集数组。
结果如下所示:
解析 JSON 字符串
现在每个字符串都可以像往常一样通过“解析”步骤进行解析
(guid as string,
status as string)
收集解析的对象
解析后的对象可以再次聚合到列表中,使用“收集”功能。
重新加入原始数据
要获得所需的结构,必须将收集的列连接到原始数据。 id
列可用于连接数据。
结果
最终选择后,结构看起来符合要求:
备注: 感谢 Microsoft 的 Erik 的帮助!我太专注于仅使用解析步骤来解决它,我没有考虑其他方法来解决问题..
【讨论】:
以上是关于Azure 数据流:从 JSON 字符串解析对象的嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章
Azure 逻辑应用 - 解析 JSON 架构失败“对象中缺少必需的属性”
使用 azure 数据工厂管道将 json 对象存储到 azure 表存储实体
如何从 Azure SQL 数据库中的 Blob 解析 Json
js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。