SSIS-如何将一个文件夹中的多个JSON文件导入Oracle?

时间:2018-09-24 16:23:26

标签: json loops ssis

我正在尝试使用SSIS将一个文件夹中的多个JSON文件导入到Oracle数据库。下面的代码是JSON解析器,它能够导入单个文件。我需要它来遍历一个文件夹并导入所有文件。这是脚本组件中用于导入JSON文件的代码。有任何想法吗?谢谢!

public override void CreateNewOutputRows()
{
    String jsonFileContent = File.ReadAllText(@"C:\Users\tngo\File\File1.json");

    JavaScriptSerializer js = new JavaScriptSerializer();

    List<IGData> igdatas = js.Deserialize<List<IGData>>(jsonFileContent);

    foreach (IGData igdata in igdatas)

    {

        Output0Buffer.AddRow();

        Output0Buffer.piececount = igdata.piececount;

        Output0Buffer.wgt = igdata.wgt;
    }
}

2 个答案:

答案 0 :(得分:2)

由于您已经在C#中,因此可以在整个代码中使用foreach循环在此处完成它。

string[] files = System.IO.Directory.GetFiles("C:\\Users\\tngo\File\\", "*.json");

foreach(string file in files)
{
    String jsonFileContent = File.ReadAllText(file)
    JavaScriptSerializer js = new JavaScriptSerializer();

    List<IGData> igdatas = js.Deserialize<List<IGData>>(jsonFileContent);

    foreach (IGData igdata in igdatas)

    {

        Output0Buffer.AddRow();

        Output0Buffer.piececount = igdata.piececount;

        Output0Buffer.wgt = igdata.wgt;
    }

}

答案 1 :(得分:0)

您需要使用Foreach Loop Task

在Forech循环编辑器中执行以下操作:

使用Foreach File Enumerator类型,然后将文件夹指向C:\Users\tngo\File\。您的文件通配符将为*.json,并且您应在Fully qualified下选中Retrieve file name。之后,单击编辑器左窗格上的Variable Mapping,然后创建一个新的字符串变量,该变量将保存您的标准文件名。在本示例中,我们将其称为ForEachLoop_StringVar

创建循环后,将Script Task拖到Foreach Loop中,然后双击Script Task打开Script Task Editor。将您在上方创建的字符串变量添加为ReadOnlyVariables,然后单击Edit Script...按钮以拉出脚本。然后,您可以通过引用变量来更改硬编码的文件名。您的脚本代码将如下所示:

public override void CreateNewOutputRows()
{
    String jsonFileContent = File.ReadAllText((string)Dts.Variables["User::ForEachLoop_StringVar"].Value);

    JavaScriptSerializer js = new JavaScriptSerializer();

    List<IGData> igdatas = js.Deserialize<List<IGData>>(jsonFileContent);

    foreach (IGData igdata in igdatas)

    {

        Output0Buffer.AddRow();

        Output0Buffer.piececount = igdata.piececount;

        Output0Buffer.wgt = igdata.wgt;
    }
}