如何处理需要反透视的 JSON 数据?

Posted

技术标签:

【中文标题】如何处理需要反透视的 JSON 数据?【英文标题】:How process JSON data that needs to be unpivoted? 【发布时间】:2019-06-10 22:55:34 【问题描述】:

我有一个 JSON 源,它有一个奇怪的布局,其中有未知数量的列。

https://theunitedstates.io/congress-legislators/committee-membership-current.json

格式如下:

ColumnHeaders =>    HLAG     HSAG    HSAG01 .... to unknown
Single row of Data  JSON     JSON    JSON

我怎样才能得到这样的数据:

Col1     Col2
HLAG     JSON
HSAG     JSON
HSAG01   JSON

我目前在 SSIS 工作,因此我可以使用 C# 解决方案。

我只是不知道如何处理 SSIS 中的未知列。

感谢您的帮助。

【问题讨论】:

是否可以修改您的源连接以使用查询在数据进入时对其进行透视? 你用的是什么版本的sql server? SQL SERVER 2012 【参考方案1】:

如果您找不到更方便的解决方案,可以使用命令行工具jq:

jq -jrc 'keys_unsorted[] as $key | $key,"\t",.[$key],"\n" ' committee-membership-current.json

根据问题描述,每个“列标题”生成一行,使用文字制表符(“\t”)作为分隔符。可以以明显的方式指定不同的分隔符。

【讨论】:

感谢您的帮助。仅仅理解您的答案的作用需要额外的努力吗?【参考方案2】:

网上有很多文章描述了解析复杂Json的过程,主要思路是使用带有System.Web.Extensions汇编的脚本组件。我认为以下文章是您正在寻找的:

Importing Complex JSON files using SQL Server Integration Services

其他有用的文章:

Approaches to Import JSON in SSIS (SQL Server 2016+) Part 1 Importing JSON Files Using SQL Server Integration Services

【讨论】:

我远远超出了以下链接中的标准,这些链接演示了创建用于反序列化的类。我的问题是 JSON 返回了一个包含无限列的数据集,所有列都包含一行数据。我需要在处理之前将其分解为行,并且很幸运,我发现我公司购买的工具仅允许将其作为 GUI 的属性。

以上是关于如何处理需要反透视的 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

Jackson - 如何处理(反序列化)嵌套的 JSON?

spring boot中各种数据不匹配如何处理jackson反序列化错误

什么是JSON+如何处理JSON字符串

Java Jackson json 到对象反序列化。如何处理 OWASP 不安全的反序列化?

Python继承模式 - 如何处理反序列化

该函数需要 PHP 支持 XML,这该如何处理