json - 在 SSIS 中读取具有 JSON 列的 csv 文件?
问题描述
我有以下包含 4 列的 CSV 文件。最后一列addresses
以 JSON 格式保存 2 个地址历史记录。我曾尝试在 SSIS 中读取它,但它将 JSON 与逗号(,)一起拆分,而不是将所有地址分组在一列下。
我为此使用了平面文件连接器。此类内容是否还有其他源组件?如何在 SSIS 中解析它,以便只有 4 列并且地址全部显示在一列下?
id,title,name,addresses
J44011,Mr,James,"{""address_line_1"": 45, ""post_code"": ""XY7 10PG""},{""address_line_1"": 15, ""post_code"": ""AB7 1HG""}"
解决方案
您可以使用脚本组件将 JSON 处理为自己的详细信息表。
我创建了以下数据流:
以下是脚本组件的步骤:
在输入上添加 ID 和地址列:
关于输入和输出:添加新输出并创建列(请记住对数据类型进行编程:
剧本:
public class Addresses
{
public int address_line_1 { get; set; }
public string post_code { get; set; }
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
//Test if addresses exist, if not leave the Row processing
if (string.IsNullOrEmpty(Row.addresses)) return;
//Fix Json to make it an array of objects
string json = string.Format("[{0}]", Row.addresses);
//Load into an array of Addressses
Addresses[] adds = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Addresses[]>(json);
//Process the array
foreach (var a in adds)
{
rowsAddressesBuffer.AddRow();
rowsAddressesBuffer.ID = Row.id;
rowsAddressesBuffer.Address1 = a.address_line_1;
rowsAddressesBuffer.PostalCode = a.post_code;
}
}
笔记:
- 添加到存储结果的类。
- 必须修复 JSON 以创建对象数组。
- 您需要添加对 System.Web.Extensions 的引用。
- 这是负载。确保将文本限定符定义为双引号 (")
推荐阅读
- python - 如何让 matplotlib 使用主目录中的字体?
- html - 链接过滤器 Vue.js
- excel - 按降序排列的 VLOOKUP
- python - 无法在 AWS SAM 本地开发中导入 python 包
- node.js - 在 nodejs 应用程序中临时存储数据
- python - 在熊猫数据框中成对计数
- dataframe - 从 Redshift 读取 Spark DataFrame 返回空 DataFrame
- nginx - 基于 http_accept_language 的 docker nginx 重定向
- git - 推送到 Git 存储库时的 i/o 超时
- c++ - 在我的 C++ 代码中使用 Gnu Plot 的详细方法是什么?