我正在尝试使用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;
}
}
答案 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;
}
}